c++ - 程序正在打印意外的空行

标签 c++

考虑这段代码:

#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/

相关文章:

C++ Socket 连接自动建立?

c++ - 将 void* 引用为 float 时数据丢失

c++ - 如何获取 char 数组中元素的地址?

c++ - 将特殊字符(如\n)转换为其转义版本

c++ - 连接信号时 gtkmm 编译器错误

c++ - 为什么替换在此函数模板中失败?

c++ - 防止多态类中的内存泄漏

c++ - 默认构造函数与隐式构造函数

c++ - Flex/Bison:构建示例项目以生成Cpp时出错

c++ - OpenGL 和 GLFW - 我需要着色器来绘制点吗?