4 c++
int main()
{
char a[101];
cout << "str a:";
gets(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里为什么gets(a);要执行cout<<"str a:";呢?
编译器使用:数字火星和GNN_gcc.
这里为什么
gets(a);要执行cout<<"str a:";呢?
gets()以前没有实际执行cout<<"str a:";,你只是错过flush()了输出流来强制在屏幕上打印:
cout<<"str a:" << flush;
Run Code Online (Sandbox Code Playgroud)
应该解决这个问题
正如在@ Slava的回答中提到的那样,流式输出被缓冲并且通常与其同步std::cin.
只有缓冲区已满或被强制使用该flush()功能时,输出才真正放在设备上.
由于gets()是(同时弃用)C函数,因此无法保证自动同步,除非您调用
std::ios::sync_with_stdio();
Run Code Online (Sandbox Code Playgroud)
一旦进入你的main()功能(请参阅文档).
附注:
而不是gets()使用c ++ 14标准弃用,而应该使用
std::string a; // Much more convenient than char a[100];
std::getline(std::cin,a);
Run Code Online (Sandbox Code Playgroud)