#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int age;
printf("What is your age?: ");
scanf("%d ", &age);
printf("your age is %d", age);
return 0;
}
我正在学习一些基本的c编程并且有一个小问题。 当我编译并运行此代码时,我的控制台屏幕将提示我我的年龄,我键入一些数字,然后按Enter键,没有任何反应。然后,只有当我点击键盘上的任何其他字母时,我的年龄才能通过最后的陈述打印出来我想知道这是怎么发生的,我该如何防止这种情况发生?我希望能够输入我的年龄并在输入我的年龄后按下输入后立即显示。
我是C的新手,一小时前刚开始搞乱它,所以如果这是一个糟糕的问题,请原谅。
答案 0 :(得分:6)
将scanf("%d ", &age);
更改为scanf("%d", &age);
即。删除空间,你不需要它。
scanf格式的空白字符使其显式读取并忽略尽可能多的空白字符。因此,在读取数字后使用scanf("%d ", ...
,它将继续读取字符,丢弃所有空格,直到它在输入上看到非空白字符。该非空格字符将留作输入函数读取的下一个字符。
答案 1 :(得分:1)
仔细阅读 printf(3)和scanf(3)的文档。请注意空格字符在scanf
的控制格式字符串中的作用。您通常应该更喜欢scanf(" %d", &age);
到scanf("%d ", &age);
,并且您应该测试scanf
的结果:
if (scanf(" %d", &age)<1) {
perror("failed to read age");
exit(EXIT_FAILURE);
}
通常的做法是使用换行符printf
结束每个\n
格式字符串。或至少恰当地致电fflush(3)。
BTW,使用所有警告和调试信息进行编译(例如,如果使用GCC ....,请使用gcc -Wall -g
)并了解如何使用调试器(例如{{ 1}})