【问题标题】:Counting the number of characters in input with getchar() method使用 getchar() 方法计算输入中的字符数
【发布时间】:2017-01-25 02:33:34
【问题描述】:

我正在从 C 编程语言 学习 C。我试图使以下代码工作:

#include <stdio.h>
int main() {
    int char_count = 0;
    while (getchar() != EOF)
        ++char_count;
    printf("Number of chars are %ld ", char_count);
    return 0;
}

我构建并运行代码。然后,我输入一个随机单词并按回车键。我希望在下一行看到一个数字,但会发生什么是光标移动到下一行。当我输入一个新单词时,也会发生同样的事情。我错过了什么?

编辑:我希望getchar() 在程序完成获取第一个单词的字符后返回EOF

【问题讨论】:

  • 您希望 getchar 何时返回 EOF?
  • 回车/换行不是EOF

标签: c getchar


【解决方案1】:

当您按下 enter/return 时,您将根据您使用的是 unix/osx 还是 windows 来生成 \n\r\n。你不是一代EOF角色。

要生成EOF 字符,您需要在unix/osx 上按^D 或在Windows 上按^Z

【讨论】:

  • 感谢您的评论,但您似乎接受了其他答案
【解决方案2】:

在命令提示符中输入 EOF 字符总是很棘手。通过在 Windows 上使用 Ctrl+Z 或在 Unix 上使用 Ctrl+D,按照 @Sarvex 的建议进行操作。

您无需对代码进行任何更改即可做的另一件有趣的事情是,您可以将输入从文本文件重定向到您的程序,而不是让您的程序接受来自命令提示符的输入。

如果您有一个名为“data.txt”的文本文件,其中包含以下文本:

你好,世界。你好吗?

编译代码后你的程序的名称是charCount。您可以执行以下操作:

我收到的输出是Number of chars are 31

【讨论】:

  • 感谢您的回答,我不知道如何使用命令提示符读取文本文件。
【解决方案3】:

如果你把EOF改成\n字符,按回车键就可以工作了:

int c = 0;
while (((c = getchar()) != '\n') && (c != EOF))
    ++char_count;

P.S:使用@David Bowling 的建议进行了改进。

【讨论】:

  • 更改应该是为'\n' 添加一个测试,而不是仅仅将EOF 替换为'\n':int c; while ((c = getchar()) != '\n' &amp;&amp; c != EOF) {}。注意getchar()如果有错误返回EOF;你想避免无限循环。
  • 这个新代码也不会计算文件中的字符数。
  • @David Bowling,谢谢,我根据您的建议改进了代码。
  • 我不确定这如何回答原始问题。我希望 getchar() 在程序完成获取第一个单词的字符时返回 EOF。
  • @apeirogon,如果您仔细阅读原始问题,您可能会看到:“我希望在下一行看到一个数字,但结果是光标移到了下一行。”这意味着getchar()在敲击回车后终止,这是\n字符而不是EOF,因为我们是从终端读取而不是文件。
猜你喜欢
  • 2015-01-13
  • 1970-01-01
  • 2019-10-24
  • 2019-05-23
  • 2023-04-08
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
相关资源
最近更新 更多