c++ - 连续使用 cin cout 和 gets 时,C 指令正在重新排序

标签 c++ cin gets

有谁知道这里连续使用 cin cout 和 gets 时为什么 C 指令被重新排序? 我正在使用 Dev-C++ 4.9.9.2。

#include<iostream>
using namespace std;

int main(){
    char a[10],b;
    for(;;){
        cout<<"\ncin>>b:";
        cin>>b;
        cout<<"gets(a):";
        gets(a);
        cout<<"cout<<a<<b:"<<a<<" "<<b<<"\n\n";
    }
}

我得到如下输出:

cin>>b:132
gets(a):cout<<a<<b:32 1


cin>>b:465
gets(a):cout<<a<<b:65 4


cin>>b:312242
gets(a):cout<<a<<b:12242 3


cin>>b:1
gets(a):cout<<a<<b: 1

cin>>b:

似乎在 gets 中传递了 cin 的一些输入.. 而且指令似乎也被重新排序为:

cin>>b;
gets(a);
cout<<"gets(a):";

而不是,

cin>>b;
cout<<"gets(a):";
gets(a);

最佳答案

cin>>b 只读取一个字符,剩下的输入由后面的输入操作读取。所以 gets sill 有东西要读,不要阻塞。

在第一个 cin >> b 处,没有可用的输入。您在缓冲区中输入 '132\n'(来自终端的输入通常是逐行输入的),然后从中取出 1。 gets 读取下一个字符 32 和终止 gets 的\n。它不需要从终端读取更多内容。

关于c++ - 连续使用 cin cout 和 gets 时,C 指令正在重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102222/

相关文章:

c++ - 为 OpenCv 将 wxString 转换为 std::string

c++ - 从 ‘boost::filesystem3::path’ 到非标量类型‘std::string’的 boost 错误转换

c++ - 获取用户的输入

c - gcc 为什么以及如何发出 gets() 警告?

c - 当 gets(t) 从命令行获取输入 "Q"时,为什么 t != "Q"不终止 while 循环?

c - 是否可以在不知道c中数组长度的情况下使用gets?

c++ - 变量在临时存储中存在多长时间?

c++ - std::vector 是否适合频繁调整大小?

c++ - 等到用户在 C++ 中按下 Enter 键?

c++一次读入一个字符的c风格字符串?