C中printf和scanf的初学者问题

C中printf和scanf的初学者问题,c,printf,scanf,C,Printf,Scanf,在这样的代码片段中,我对scanf()和printf()函数有问题: #include <stdio.h> int main() { int a; int b; int c; scanf("%d %d", &a, &b); while (c >= 2) { c = a % b; a = b; b = c; printf ("%d\n", c); }

在这样的代码片段中,我对
scanf()
printf()
函数有问题:

#include <stdio.h>

int main() {
    int a;
    int b;
    int c;
    scanf("%d %d", &a, &b);
    while (c >= 2) {
        c = a % b;
        a = b;
        b = c;
        printf ("%d\n", c);
    }
    return 0;
}
#包括
int main(){
INTA;
int b;
INTC;
scanf(“%d%d”、&a和&b);
而(c>=2){
c=a%b;
a=b;
b=c;
printf(“%d\n”,c);
}
返回0;
}
我期望发生的事情,以及在我兄弟的代码::块中发生的事情,是程序等待来自stdin的输入,然后打印到stdout结果,每行一个,直到它达到最高公约数

但是,当我在
vi
中键入它,然后用
gcc
编译它并从我的终端运行程序时,程序会正确地接受输入,但退出时不会将任何内容返回到
stdout

如果我注释掉
scanf()
行,并将任何数字硬编码到
a
b
变量中,则一切正常

我正在尝试学习C语言,我已经阅读了有关函数的基本文档,但我无法帮助理解这种行为。 我试图在声明变量之前放置一个
setbuf(stdout,NULL)
,但没有任何更改


有人能给我一个线索吗?

您的
scanf
printf
调用没有问题,但是,正如其他人提到的,一个明显的问题是,您正在测试未初始化变量(
c
)的值

也许,你想要的是一个
do{…}while(…)循环,而不是简单的
while
循环

以下代码将保证至少执行一次循环,然后在每个循环的末尾检查是否重复该循环:

#包括
int main(){
INTA;
int b;
INTC;
scanf(“%d%d”、&a和&b);
做{
c=a%b;
a=b;
b=c;
printf(“%d\n”,c);
}而(c>=2);
返回0;
}
(或者,用
>=2的值初始化
c
,即使用声明:
int c=3;


进一步讨论
do。。当
循环时,请参见此处:

c
被单元化编译器或操作系统有效地将
c
设置为零。如果不是,那么执行它时,它可能会在标准输出上打印一些内容。本质上,这是未定义的行为。
scanf()
有问题,尽管不是问题的原因。OP应检查返回值以检测无效输入,并避免在
a
b
未正确读取时继续操作。@chqrlieforyellowblockquotes我不能/不会对此提出异议!:)