新手刚学C语言getchar函数,有个有关问题想问问

新手刚学C语言getchar函数,有个问题想问问

#include<stdio.h>
int main() {
int c;
printf("hello\n");
while ((c = getchar()) != EOF && c != '\n') {
printf("%c", c);
}
return 0;
}

我的打印hello的语句在getchar函数前面,为什么运行的时候,还是等待我输入后,才打印hello
------解决方案--------------------
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
while (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。

------解决方案--------------------
和编译器有关,VC6的变异器不是你这种情况,你用的什么编译器?
如果你的代码想避免这种情况可以在printf之后加上这句:fflush(stdout);应当就可以了。
引用:

#include<stdio.h>
int main() {
int c;
printf("hello\n");
while ((c = getchar()) != EOF && c != '\n') {
printf("%c", c);
}
return 0;
}

我的打印hello的语句在getchar函数前面,为什么运行的时候,还是等待我输入后,才打印hello