【问题标题】:How to use "gets" function in C++ after previous input?先前输入后如何在 C++ 中使用“获取”函数?
【发布时间】:2013-04-30 15:45:06
【问题描述】:

我尝试使用gets() 函数输入数据,但每当程序执行到达带有gets 的留置权时,它就会忽略它。

当我在没有先前数据输入的情况下使用gets() 时,它运行正常。但是当我在数据输入后使用它时,就会出现问题。

这是在先前数据输入后使用的代码(因此在执行中我无法将数据输入到字符串):

int main() {
    char str[255];
    int a = 0;
    cin >> a;
    if(a == 1) {
        gets(str);
        cout << "\n" << str << endl;
    }
}

我该如何解决这个问题?

注意:cin.getline 也是如此

【问题讨论】:

  • 你永远不要使用gets()!从根本上说,这是不安全的,也不可能确保安全。另外,不要混合使用 C 和 C++ I/O。现在对于 cin.getline,这是一个更有趣的问题,我刚刚在这里回答了:stackoverflow.com/questions/16405630/…
  • 永远,永远,永远使用gets。您无法可靠地避免超出缓冲区并导致各种麻烦。至少使用fgets 代替......但在C++ 中,你几乎总是使用std::getline(cin, a_std_string_variable) 做得更好。
  • 为什么这道题的标题是C,标签却是C++?
  • 因为人们经常将这两者混淆,令人痛心。由于这是一个 C++ 问题,它可能已被编辑重新标记。
  • 从 2011 ISO C 标准开始,gets 已从语言中删除。

标签: c++ string gets


【解决方案1】:

之后

cin >>a

当您输入a 并回车时,cin 还留下了一个\n 字符,因此,当您使用cin.getline()gets(str) 时,它将读取该换行符。

尝试以下方法:

cin >>a;
cin.ignore(); //^^this is necessary
if(a==1){
    gets(str);
}

你最好使用C++的方式读取输入:

cin >> a;
cin.ignore();
string str;
if (a == 1)
{
   getline(cin, str);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2017-02-09
    相关资源
    最近更新 更多