c创建一个程序,计算句子中的单词数量,并将句子中的所有字母大写。

时间:2016-02-25 06:50:28

标签: c

所以我有这个代码,但是当我运行它时,它总是说无论我放入多少单词的数量都是1,希望它很容易解决。我尝试将scanf更改为%s,但这不起作用,因为它只打印出第一个单词,但它的单词数量正确。

#include <stdio.h>

int main()
{ 
     int words = 0;
     char ch,sen[100]="", i;
     printf("Enter a sentence ended by a '.', a '?', or a '!':");
      scanf("%[^\n]", sen);
    while ((ch = getchar()) != '\n') {
    if (ch == ' ')
        words++;
    }
    words++;

   for(i=0;sen[i];i++)
 {
         if( (sen[i]>=97) && (sen[i]<=122) )
                    sen[i]-=32;
     }

    printf("Capitalized sentence: %s\n", sen);
    printf("Total number of words:%d\n", words);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您的程序存在重大错误。 scanf()不会读取/存储换行符。然后getchar()读取换行符。这个循环只执行一次。

while ((ch = getchar()) != '\n') {
if (ch == ' ')
    words++;
}

因此你只得到一个字。为什么使用2种方法来获取输入。

使用scan()和操纵变量“sen”或使用getchar()并在句子中将字符1 1存储。

// don't use scanf() in this case
i=0;
while ((ch = getchar()) != '\n') {
if (ch == ' ')
    words++;
sen[i++] = ch;
}

建议使用fgets()来获取此类输入。了解它。