我试图从标准输入中读取。第一行是我要读的行数。我下次阅读的行将再次打印。这是代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (unsigned int i = 0; i < n; ++i)
{
char a[10];
cin.get (a, 10);
cout << "String: " << a << endl;
}
return 0;
}
当我运行它并给出行数时,程序退出。我还没弄清楚发生了什么,所以我决定在这里问一下。
提前致谢。
答案 0 :(得分:6)
混合格式化和未格式化的输入充满了问题。在您的特定情况下,这一行:
std::cin >> n;
消耗您输入的数字,但将'\n'
留在输入流中。
随后,这一行:
cin.get (a, 10);
不消耗任何数据(因为输入流仍然指向'\n'
)。由于相同的原因,下一次调用也不会消耗任何数据,依此类推。
接下来的问题是,“我如何消费'\n'
?”有几种方法:
你可以阅读一个角色然后扔掉它:
cin.get();
无论长度如何,您都可以读取整行:
std::getline(std::cin, some_string_variable);
您可以忽略当前行的其余部分:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
作为一些相关的建议,我永远不会使用std::istream::get(char*, streamsize)
。我总是喜欢:std::getline(std::istream&, std::string&)
。
答案 1 :(得分:2)
在cin.get()
之前添加cin.get(a, 10)
将解决您的问题,因为它会读取输入流中的剩余结尾。
答案 2 :(得分:1)