控制流程C++

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.

πάν*_*ῥεῖ 8

这里为什么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)