程序无法从while循环while (c != EOF)
我已经在终端上尝试过
#include <stdio.h>
main() {
int c = getchar();
int n = 0;
while (c != EOF) {
if (c == ' ') {
while (c == ' ')
c = getchar();
}
else {
++n;
while (c != ' ')
c = getchar();
}
}
printf("\n%d", n);
}
它应该显示单词的编号。但是它要求输入后输入
答案 0 :(得分:4)
程序无法从while循环
中退出while (c != EOF)
那是因为您没有在内部EOF
循环中测试while
:
while (c == ' ') c = getchar();
〜>
while (c == ' ' && c != EOF)
c = getchar();
您标记了问题 kernigham-and-ritchie 。我希望您只是在使用这本书,并且不打算同时学习C的标准 *)样式。
main()
的返回类型。当函数在C中不接受任何参数时,其参数列表应为void
,因此
int main(void)
我建议你这样做
int ch;
while ((ch = getchar()) != EOF) {
// process ch
}
c == ' '
除空格外,还有其他空白。有关字符分类的功能列表,请参见<ctype.h>
。
#include <stddef.h> // size_t
#include <stdbool.h> // bool, true, false
#include <ctype.h> // isalnum()
#include <stdio.h> // getchar(), printf()
int main(void)
{
size_t num_words = 0;
bool in_word = false;
int ch;
while ((ch = getchar()) != EOF) {
if (!in_word && isalnum(ch)) { // new word begins. isalnum() or isalpha()
in_word = true; // ... depends on your definition of "word"
++num_words;
continue; // continue reading
}
else if (in_word && isalnum(ch)) { // still inside a word
continue; // continue reading
}
in_word = false; // when control gets here we're no longer inside a word
} // when control reaches the end of main() without encountering a return statement
// the effect is the same as return 0; since C99 *)
printf("Number of words: %zu\n\n", num_words);
}
为获得更好的变量局部性,也许应首选for
循环:
for (int ch; (ch = getchar()) != EOF;) // ...
*)语言标准:
C99:ISO/IEC 9899:TC3
C11:ISO/IEC 9899:201x(接近最终标准的草案)
C18:ISO/IEC 9899:2017(建议中)