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我不能/不会对此提出异议!:)