为什么不能上线?

时间:2019-05-04 06:17:11

标签: c++

为什么不能getline()? 是否因为缓冲区中留有字符串?我还采取行动删除有疑问的缓冲区。但是这是不可能的。你知道为什么吗?

int len;
    cout << "input length : ";
    cin >> len;

    int* intPass = new int[len];
    int* intSolu = new int[len];

    string strPass;

    getline(cin, strPass);

    cout << strPass;

    cout << "intPass output : ";
    for (int i = 0; i < len; i++) {
        cin >> intPass[i];
    }

1 个答案:

答案 0 :(得分:0)

  

为什么不能上线?

输入 input length 的值时,输入数字和换行符,该换行符通过 getline

获得

如果您输入了实例 123 aze qsd ,则 strPass 将为“ aze qsd”

所以你得到了一行,但没有得到预期的

如果您要在同一行中的号码之后全部刷新,则可以将 getline 通话加倍

例如,还修改您的代码以查看更多内容:

#include <iostream>
#include <string>
using namespace std;

int main()
{

  int len;
  cout << "input length : ";
  cin >> len;

  int* intPass = new int[len];
  int* intSolu = new int[len];

  string strPass;

  getline(cin, strPass);
  getline(cin, strPass);

  cout << "strPass is " << strPass << endl;

  cout << "intPass input :" << endl; // it is an input, not an output
  for (int i = 0; i < len; i++) {
    cin >> intPass[i];
  }

  cout << "intPass output is" << endl;
  for (int i = 0; i < len; i++) {
    cout << intPass[i] << endl;

  return 0;
}

编译和执行:

pi@raspberrypi:~ $ g++ -pedantic -Wall -Wextra c.cc
c.cc: In function ‘int main()’:
c.cc:13:8: warning: unused variable ‘intSolu’ [-Wunused-variable]
   int* intSolu = new int[len];
        ^~~~~~~
pi@raspberrypi:~ $ ./a.out
input length : 3
aze qsd
strPass is aze qsd
intPass input :
11
22
33
intPass output is
11
22
33
pi@raspberrypi:~ $ 

我建议您检查cin >> len是否成功,如果是,则检查 len 的值,例如:

if (!(cin >> len) || (len < 0)) {
  cout << "invalid length" << endl;
  return -1.
}