我正在尝试使用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);
答案 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
(更简单,更简洁,更不易出错)