scanf之后没有考虑getchar

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

#include  #include  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()不存在而且我不知道为什么。

 scanf("%d",&age); 

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

 scanf("%d%*c",&age); 

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

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

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

请注意, c是上一行中的int

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

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