为什么while循环中的scanf有效?

时间:2016-10-21 15:31:28

标签: c while-loop scanf

我无法理解为什么这正是我想要的。我在循环中使用两个scanf的部分让我很困惑。我使用devcpp编译它。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int dend, dsor, q, r;
    char c;
    while(c!='n')
    {
        printf("enter dividend: ");
        scanf("%d", &dend);
        printf("enter divisor: ");
        scanf("%d", &dsor);
        q=dend/dsor;
        r=dend%dsor;
        printf("quotient is %d\n", q);
        printf("remainder is %d\n", r);
        scanf("%c", &c);
        printf("continue? (y/n)\n");
        scanf("%c", &c);
    }
    system("PAUSE");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

FWIW,您的代码会调用undefined behavior。在部分

char c;
while(c!='n')

c是一个未初始化的本地变量,具有自动存储功能,您尝试使用c的值,但它是不确定的。

也就是说,首先scanf("%c", &c);用于吃掉输入缓冲区中存在的换行符,因为在上次输入后按下了回车键。 You can read about it in details in another post