【问题标题】:C Program not exiting input modeC程序未退出输入模式
【发布时间】:2017-12-04 22:23:51
【问题描述】:

我试图找出我的 C 程序中的制表符、空格和换行符的数量。代码是:

#include <stdio.h>

void main()
{
    char c;
    int tabs=0 , spaces=0 , nl=0 ;
    printf("Provide the input");
    scanf("%c" , &c);
    while(c != EOF)
    {
        if(c == ' ')
        spaces++;
        else if(c == '\n')
        nl++;
        else if(c == '\t')
        tabs++;
        scanf("%c" , &c);
    }
    printf("blanks:%d\nspaces:%d\nnewlines:%d" , spaces , tabs , nl);
}

好吧,我希望它能做到这一点,但代码并没有超出接受输入阶段。我究竟做错了什么?下面是我的命令行的样子:

[tejas@localhost The_C_Programming_Language]$ cc Exercise_1-8.c

[tejas@localhost The_C_Programming_Language]$ ./a.out

Provide the input seguiofgawie

gweuigwh

e u w   f qw[uwf            
[PHWUO FEFF 
qah fuwpfyh fweor

(我一直按Return键,但没有结束。请帮助。感谢您的阅读。这是我的第一个问题,希望我没有做错什么...)

EDITgetchar() 也不起作用,我目前使用 Fedora 26 和 GEDIT 作为我的文本编辑器

编辑getchar() 有效,为了发送 EOF 字符,应在空行上按 Ctrl+D,如果您希望只需按一下 RETURN 键即可完成,将循环条件更改为variable != '\n'。对于传播错误信息,我深表歉意。

【问题讨论】:

  • EOF 不等于返回。在大多数系统上,它是 Ctrl + Z。但这仍然取决于。
  • 返回键 == '\n'(在基于 unix 的操作系统上),在 Windows 上是 \r\n
  • (1) scanf("%c" , &amp;c); 从不将 c 设置为 EOF。 (2) EOF 不是char 类型的有效值。请查看fgetcgetchar,并密切关注它们的返回类型。 (3) 找出教你写void main()的来源,永远不要再相信那个人、书或网站。
  • 如果你需要读取单键点击,你必须将终端设置为RAW,然后你可以使用fgetc或者read而不是scanf。

标签: c user-input


【解决方案1】:

通过将扫描的 char 值与 EOF 进行比较,您在这里提交了一个小错误。引用另一个答案

EOF 是一个宏,它扩展为一个整数常量表达式,其类型为 int 和一个依赖于实现的负值,但通常为 -1。

但是,由于您是从标准输入读取的,因此您将无法将其作为单个字符输入,因为它将被视为 2 个字符并且不会产生所需的结果。 简而言之,您的程序以所需的方式运行。为了让它退出输入模式,只需将您的 while 条件更改为您能够满足的条件。

【讨论】:

【解决方案2】:

我认为,用户给出的字符不能与 EOF(文件结尾)进行比较,因为您没有处理任何文件,即您没有打开任何文件以验证其结尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多