我在如下代码段中对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;
}
我期望发生的事情,并发生在我哥哥的Code :: Block中,是程序等待stdin
的输入,然后将结果打印到stdout
,每行一个,直到达到最高通用除数。
但是,当我在vi
中键入它,然后用gcc
对其进行编译并从终端运行该程序时,该程序正确地接受了输入,但是退出而没有返回任何内容给stdout
。
如果我注释掉scanf()
行并将任何数字硬编码到a
和b
变量中,一切都会按预期工作。
我正在尝试学习C,并且已经阅读了有关函数的基本文档,但是我不禁理解这种行为。我试图在声明变量之前放一个setbuf(stdout, NULL)
,但是什么都没有改变。
有人可以给我一个线索吗?
并不能完全从问题中清楚您真正要寻找的是什么,但是,正如其他人提到的那样,一个[[obvious问题是您正在测试未初始化变量(c
)的值。 。
do { ... } while (...);
循环,而不是简单的while
循环。以下代码将
保证执行循环至少一次,然后在每个循环的结束,检查是否重复它:
#include <stdio.h>
int main() {
int a;
int b;
int c;
scanf ("%d %d", &a, &b);
do {
c = a % b;
a = b;
b = c;
printf ("%d\n", c);
} while (c >= 2);
return 0;
}
关于do .. while
循环的更多讨论,请参见此处:'do...while' vs. 'while'