回 帖 发 新 帖 刷新版面

主题:请教scanf问题

#include <stdio.h>
int main (void)
{
    int a,b,c;
    printf ("please Input\n");
    scanf ("%d%d",&a,&b);
    c=a+b;
    printf ("%d+%d=%d\n",a,b,c);
    return 0;
}
这段在执行的时候输入数字,按回车后,窗口就关闭了,然后在这段语句return 0前加入getchar ()情况也一样。
然后修改如下:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    int a,b,c;
    printf ("please Input\n");
    scanf ("%d%d",&a,&b);
    c=a+b;
    printf ("%d+%d=%d\n",a,b,c);
    system ("pause");
    return 0;
}
执行就正常了,请问这是为什么啊

回复列表 (共5个回复)

沙发

这个问题涉及文件缓冲区概念。在输入数据的时候,按回车前,数据是以文本形式保存在文件缓冲区里的,按下回车后按照scanf中的格式进行字符串读取并转换。未等看到结果窗口就闪闭,原因是操作系统决定的,想看到结果加一个getchar()不够,因为getchar()每次只读取一个字符,上面的scanf按照要求已经将两个整数读入,最后文件缓冲区内还会留下换行符(你按回车产生的字符),此时getchar()将回车符从文件缓冲区内取走,所以起不到等待用户输入字符的作用,解决方法是再加一个getchar()就行。system()函数用来执行系统本身的指令,pause是暂停,程序执行到system()时就会暂停。这是保证窗口不会自动关闭的两个方法。

板凳


谢谢你的回复,明白了。

3 楼

我还想问一下,如果我的语句里面需要输入多个数字,那就需要有与之想对应数量的getchar(),有没有什么语句可以代替(除了system ("pause"))。

4 楼

[quote]如果我的语句里面需要输入多个数字,那就需要有与之想对应数量的getchar()[/quote]
不是这样的。不论输入多少数字,最后只需要一个getchar()。提示:scanf本身就可以跳过空格(包括'\t', '\n'等字符)

示例代码:
for (;;)
{
    int number;
    if (scanf("%d", &number) == 1)
    {
        printf("输入了数字:%d\n", number;
    }
    else
    {
        printf("输入错误,结束\n");
        break;
    }
}

getchar();

5 楼

受教了 谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册