【发布时间】: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键,但没有结束。请帮助。感谢您的阅读。这是我的第一个问题,希望我没有做错什么...)
EDIT:getchar() 也不起作用,我目前使用 Fedora 26 和 GEDIT 作为我的文本编辑器
编辑:getchar() 有效,为了发送 EOF 字符,应在空行上按 Ctrl+D,如果您希望只需按一下 RETURN 键即可完成,将循环条件更改为variable != '\n'。对于传播错误信息,我深表歉意。
【问题讨论】:
-
EOF 不等于返回。在大多数系统上,它是 Ctrl + Z。但这仍然取决于。
-
返回键 == '\n'(在基于 unix 的操作系统上),在 Windows 上是 \r\n
-
(1)
scanf("%c" , &c);从不将c设置为EOF。 (2)EOF不是char类型的有效值。请查看fgetc和getchar,并密切关注它们的返回类型。 (3) 找出教你写void main()的来源,永远不要再相信那个人、书或网站。 -
如果你需要读取单键点击,你必须将终端设置为RAW,然后你可以使用fgetc或者read而不是scanf。
标签: c user-input