【发布时间】:2020-03-28 22:39:08
【问题描述】:
我在如下代码的 sn-p 中遇到了 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),但没有任何改变。
谁能给我一个线索?
【问题讨论】:
-
c被统一化 -
编译器或操作系统实际上使
c为零。如果不是,那么当你执行它时,它可能会在标准输出上打印一些东西。本质上,这是未定义的行为。