C程序未退出输入模式

时间:2017-12-04 12:02:40

标签: c user-input

我试图找出我的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

(我一直按返回键,但没有结束。请帮忙。感谢您的阅读。这是我的第一个问题,希望我没有做错任何事......)

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

编辑getchar()有效,为了发送EOF字符,应该在空行上按Ctrl + D,如果你想在只需按一下就完成RETURN键,将循环条件更改为variable != '\n'。我为传播错误信息道歉。

2 个答案:

答案 0 :(得分:2)

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

  

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

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

答案 1 :(得分:0)

我认为,用户提供的字符无法与EOF(文件末尾)进行比较,因为您没有处理任何文件,即您没有打开任何文件以验证其结束。