考虑这段代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
int n = 1;
string data[13];
while(n > 0){
cin >> n;
for(int i = 0; i < n; i++){
getline(cin,data[i]);
cout << data[i] << endl;
}
}
}
我在我的 Android 上的 cppdroid 中编译了这个。我想在数组中保留 n 行。 (n <= 13)。一切都很好。但是,当我在程序的第一行输入一个整数时,它会打印一个空行,而在第三行,程序会输入行数。我的控制台窗口如下所示:
2
This is line 1.
This is line 1.
And this is line 2.
And this is line 2.
我想删除不需要的空格。
最佳答案
cin >> n;
仅使用您输入的数字,并在输入缓冲区中(至少)留下一个换行符。
这个换行符然后被第一个执行的读取并输出
getline(cin,data[i]);
cout << data[i] << endl;
为了避免这种情况,您也可以使用字符串的 getline
作为整数输入,例如通过stoi
转换为整数。或者,不太健壮的是,您可以在流上调用 ignore
方法来忽略下一个换行符之前的所有内容(包括下一个换行符)。它的鲁棒性较差,因为整数的格式化输入可能会将流置于错误模式,在错误模式被清除之前,它会忽略进一步的输入操作。
对于数组,最好使用std::vector
。那么您就不需要决定固定容量。
关于c++ - 程序正在打印意外的空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249365/