扫描后不考虑getchar

时间:2014-11-09 12:50:55

标签: c

我在C学习编程,并尝试创建一个程序,询问用户他的年龄。当用户写下他的年龄(例如18岁)时,他会得到消息"所以你已经18岁了#34;当我执行.exe文件时,它会在您看到该消息后自动关闭,所以您很快就看不到它。然后我添加了getchar,以便用户读取消息,然后按Enter键。这是我写的程序:

#include <stdio.h>
#include <stdlib.h>

int main()

{
int age=0;
printf("How old are you?\n");
scanf("%d",&age);
printf("So you're %d years old", age);
getchar();
return 0;
}

不幸的是,当我执行.exe文件时,它仍会自动关闭,就像getchar()不存在而且我不知道原因。

2 个答案:

答案 0 :(得分:2)

scanf("%d",&age);

当程序执行到达上面的行时,键入一个整数并按Enter键。 整数由scanf占用,而您已按下的\n(换行符或Enter)仍保留在由stdin占用的getchar()中。摆脱它,用

替换你的scanf
scanf("%d%*c",&age);

%*c告诉scanf扫描一个字符,然后将其丢弃。在您的情况下,%*c会读取换行符并将其丢弃。

另一种方法是在代码stdin之后使用以下内容刷新scanf

while ( (c = getchar()) != '\n' && c != EOF );

请注意,c在上面一行中是int

答案 1 :(得分:1)

您只是在查看结果时遇到问题,因为您从窗口环境启动程序,并且一旦内部任务完成,窗口就会关闭。如果从预先存在的shell窗口(Linux,Mac或Windows)中的命令行运行已编译的程序,结果将在您返回到提示后保留在屏幕上(除非您已经通过执行某种清晰的屏幕结束)。更好的是,在这种情况下,您不需要无关的getchar()调用。

对于Windows,打开命令提示符窗口后,您将发出&#34; cd&#34;命令更改为包含已编译程序的目录,然后键入其名称。对于Linux(并且,我认为,Mac,因为Mac是UNIX),在使用&#34; cd&#34;更改到适当的目录后,您需要在程序名之前输入./。