/*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:读入一个英文文本行,将其中每个单词的第一个字母改成 大写,然后输出此文本行 (这里的“单词”是指由空格 隔开的字符串)。 例如:若输入:“I am a student to take the examination.”, 则应输出:“I Am A Student To Take The Examination.”。 ------------------------------------------------------*/ #include "ctype.h" #include "string.h" #include "stdio.h" /**********ERROR**********/ upfst ( char p ) { int k=0; /**********ERROR**********/ for ( ; p; p++ ) if ( k ) { if ( *p == ' ') k = 0; } /**********ERROR**********/ else if ( *p == ' ' ) { k = 1; *p = toupper( *p ); } } main( ) { char chrstr[81]; printf( "\nPlease enter an English text line: " ); gets( chrstr ); printf( "\n\nBefore changing:\n %s", chrstr ); upfst( chrstr ); printf( "\nAfter changing:\n %s\n", chrstr ); }
时间: 2023-07-01 10:21:15 浏览: 112
下面是修改后的程序:
```
#include "ctype.h"
#include "string.h"
#include "stdio.h"
void upfst(char *p) {
int k = 1;
while (*p != '\0') {
if (k && isalpha(*p)) {
*p = toupper(*p);
k = 0;
} else if (*p == ' ') {
k = 1;
}
p++;
}
}
int main() {
char chrstr[81];
printf("\nPlease enter an English text line: ");
fgets(chrstr, 81, stdin);
printf("\n\nBefore changing:\n %s", chrstr);
upfst(chrstr);
printf("\nAfter changing:\n %s\n", chrstr);
return 0;
}
```
修改说明:
1. `upfst` 函数的参数应该是一个指向字符数组的指针,用来修改字符数组中的内容,而不是一个字符;
2. `upfst` 函数中的循环条件应该是 `while (*p != '\0')`,表示遍历整个字符数组;
3. 在 `upfst` 函数中,如果当前字符是字母且是一个单词的第一个字母,则将其转换为大写字母,并将 `k` 置为 0,表示已经处理过一个单词的第一个字母;
4. 在 `upfst` 函数中,如果当前字符是空格,则将 `k` 置为 1,表示下一个字符是一个单词的第一个字母;
5. 在 `main` 函数中,应使用 `fgets` 函数来读取输入的字符串,以避免使用不安全的 `gets` 函数;
6. 在 `main` 函数中,应将读取到的字符串最后一个字符改为 `\0`,以便 `upfst` 函数正确处理字符串。
阅读全文