在C ++中获取多行句子输入

时间:2019-04-19 06:35:52

标签: c++ arrays string

我正在尝试使用2D char数组在c ++中采用多行字符串输入(可能包含空格),但是循环被终止,而在代码中n = 1时不接受任何输入:

当n = 2时,它仅需要一个输入,而当我尝试打印input [0]时,它将打印空白。但是对于cout <

char input[100][100];
int n,i;
cout<<"Enter no of lines : ";
cin>>n;
cout<<"Enter "<<n<<" sentences : "<<endl;
for(i=0;i<n;i++)
    cin.getline(input[i],100);

2 个答案:

答案 0 :(得分:0)

输入行数(例如4)时,请按4,然后按【{1】】键。它以enter的形式存储在标准输入的stdin中。当您使用4\n阅读时,您正在阅读cin.getline()。您将必须使用\n来忽略stdin中的现有缓冲区。但是,使用>>运算符会更好,因为它可以处理换行符。 对于多行输入,您可以向cin.ignore输入第三个参数:定界符,用于指定表示输入结束的内容。

答案 1 :(得分:0)

这是混合格式化和未格式化输入时的常见问题。格式化输入后,内部缓冲区将位于第一个空白字符之前和\n 之前。防弹方式是始终使用getline,然后扫描第一行以提取行数。但是对于这种简单的情况,在读取行数以跳过行尾之后,只需使用伪getline就可以了:

char input[100][100];
int n,i;
cout<<"Enter no of lines : ";
cin>>n;
cin.getline(input[0], 100);   // skip the end of line
cout<<"Enter "<<n<<" sentences : "<<endl;
for(i=0;i<n;i++)
    cin.getline(input[i],100);

但是:

  • 您应始终在读取后测试cin(如果用户错误地输入e而不是4怎么办?)
  • 您应避免使用char arrays,并始终在C ++中使用string(更简单,更简洁,更不易出错)