C中的printf和scanf的初学者问题

问题描述 投票:0回答:1

我在如下代码段中对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()行并将任何数字硬编码到ab变量中,一切都会按预期工作。

我正在尝试学习C,并且已经阅读了有关函数的基本文档,但是我不禁理解这种行为。我试图在声明变量之前放一个setbuf(stdout, NULL),但是什么都没有改变。

有人可以给我一个线索吗?

c printf scanf
1个回答
0
投票

并不能完全从问题中清楚您真正要寻找的是什么,但是,正如其他人提到的那样,一个[[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'
© www.soinside.com 2019 - 2024. All rights reserved.