所以我有这个代码,但是当我运行它时,它总是说无论我放入多少单词的数量都是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;
}
答案 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()来获取此类输入。了解它。