在C语言中,扫描语句后执行打印语句


    #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编程,有一个小问题。当我编译并运行这段代码时,我的控制台屏幕将提示我输入我的年龄,我输入一些数字并按回车键,但什么也没有发生。然后,只有当我在键盘上敲击任何其他字母时,我的年龄才会被最后一条语句打印出来。我想知道这是怎么发生的,我怎么防止它?我希望能够输入我的年龄,并在输入我的年龄后按回车键显示它。

我是C的新手,一个小时前才开始摆弄它,所以如果这是一个不好的问题,请原谅。

scanf("%d ", &age);改为scanf("%d", &age);

。去掉空格,这里不需要了。

scanf格式中的空白字符导致它显式读取并忽略尽可能多的空白字符。因此,在scanf("%d ", ...读取数字后,它将继续读取字符,丢弃所有空白,直到它在输入中看到非空白字符。该非空白字符将作为输入函数下一个要读取的字符。

您应该明白,stdio(3)是缓冲的。

仔细阅读 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);
}

通常的做法是用换行符n结束每个printf格式字符串。或者至少适当地调用fflush(3)。

BTW,编译所有的警告和调试信息(如gcc -Wall -g如果使用GCC ....),并学习如何使用调试器(如gdb)