Eclipse CDT编译C程序后出现意外输出
使用GCC 5.1.0编译器在eclipse CDT上尝试此代码时 所有字符串都是在用户输入后打印的。。 当在Visual Studio和代码块IDE上编译它时,即使使用windows CMD,该程序也能正常工作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输出: 谢谢,好的,我现
#包括
静态字符字符串[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;
}