Eclipse CDT编译C程序后出现意外输出

Eclipse CDT编译C程序后出现意外输出,c,gcc,eclipse-cdt,C,Gcc,Eclipse Cdt,使用GCC 5.1.0编译器在eclipse CDT上尝试此代码时 所有字符串都是在用户输入后打印的。。 当在Visual Studio和代码块IDE上编译它时,即使使用windows CMD,该程序也能正常工作 ‪#‎包括‬ 静态字符字符串[128]=“”; int main(){ printf(“键入字符串:”); scanf(“%s”,字符串); printf(“字符串为%s”,字符串); 返回0; } Eclipse输出: Visual Studio输出: 谢谢,好的,我现

使用GCC 5.1.0编译器在eclipse CDT上尝试此代码时 所有字符串都是在用户输入后打印的。。 当在Visual Studio和代码块IDE上编译它时,即使使用windows CMD,该程序也能正常工作


‪#‎包括‬ 
静态字符字符串[128]=“”;
int main(){
printf(“键入字符串:”);
scanf(“%s”,字符串);
printf(“字符串为%s”,字符串);
返回0;
}

Eclipse输出:


Visual Studio输出:


谢谢,好的,我现在明白了。我认为问题在于,无论何时,只要您想确定某个内容是由代码中的某个给定点打印的,就需要在该点刷新
stdout

否则,流式内容可以排队并以依赖于实现的方式交付(通常是小批量)

C标准库的
printf()
在输出到
stdout
并遇到换行符
\n
时,提供了一个隐式刷新,因此您不需要自己调用
flush()
。而对于C++的
std::cout
,只有
std::endl
具有此属性<代码>\n不保证有效

在C中故意刷新
stdout
可以这样做:
fflush(stdout)


另请参见:

因此Eclipse有一个集成编辑器…VS启动了在控制台中运行的程序。又是什么问题?`什么问题?如果“意外输出”是指IDE插入的隐式
pause
命令,那么这不是问题(如果窗口立即关闭,您将如何查看输出?)。为什么要将其标记为
c++
?它似乎没有使用任何C++特征。上面描述的问题,在两个IDE中运行代码的顺序是不一样的,伊柯丽斯首先要求我输入字符串--> SCANF,然后打印出所有的PrtTf。当VS正确执行时,不要忘记
fflush()
‪#‎include‬ <stdio.h>
static char string[128] = "";
int main() {
printf("Type a string: ");
scanf("%s",string);
printf("The String is %s", string);
return 0;
}