在C中扫描语句后执行print语句

时间:2014-08-08 17:17:57

标签: 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编程并且有一个小问题。 当我编译并运行此代码时,我的控制台屏幕将提示我我的年龄,我键入一些数字,然后按Enter键,没有任何反应。然后,只有当我点击键盘上的任何其他字母时,我的年龄才能通过最后的陈述打印出来我想知道这是怎么发生的,我该如何防止这种情况发生?我希望能够输入我的年龄并在输入我的年龄后按下输入后立即显示。

我是C的新手,一小时前刚开始搞乱它,所以如果这是一个糟糕的问题,请原谅。

2 个答案:

答案 0 :(得分:6)

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

即。删除空间,你不需要它。

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

答案 1 :(得分:1)

您应该了解stdio(3)buffered

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