我在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()不存在而且我不知道原因。
答案 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;更改到适当的目录后,您需要在程序名之前输入./。