gpt4 book ai didi

计算用户输入的单词

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:14 25 4
gpt4 key购买 nike

程序无法跳出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);
}

它应该显示单词的编号。但是它在输入后要求输入

最佳答案

  • the program cannot get out from the while loop 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 -loop 应该是首选:

for (int ch; (ch = getchar()) != EOF;)  // ...


*) 语言标准:
C99:ISO/IEC 9899:TC3
C11:ISO/IEC 9899:201x (接近最终标准的草案)
C18:ISO/IEC 9899:2017 (提案)

关于计算用户输入的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56108087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com