[英]Beginner problem with printf and scanf in 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;
}
我期望发生的事情,并且发生在我兄弟的 Code::Block 中,是让程序等待来自stdin
,然后将结果打印到stdout
,每行一个,直到达到最高公约数。
但是,当我在vi
输入它然后用gcc
编译它并从我的终端运行程序时,程序正确地接受输入但退出而不返回任何东西stdout
。
如果我注释掉scanf()
行并将任何数字硬编码到a
和b
变量,一切都会按预期进行。
我正在尝试学习 C 并且我已经阅读了有关函数的基本文档,但我无法理解这种行为。 我试图在声明变量之前放置一个setbuf(stdout, NULL)
但没有任何改变。
有人可以给我一个线索吗?
您的scanf
和printf
调用没有任何问题,但正如其他人所提到的,一个明显的问题是您正在测试未初始化变量 ( 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;
}
(或者,使用>= 2
的值初始化c
,即使用声明: int c = 3;
。)
有关do .. while
循环的进一步讨论,请参见此处: 'do...while' vs. 'while'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.