gpt4 book ai didi

c++ - cin.get() 循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:54 26 4
gpt4 key购买 nike

我试图从标准输入读取。第一行是我要阅读的行数。我接下来阅读的行将再次打印。这是代码:

#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;
}

当我运行它并给出行数时,程序退出。我还没有弄清楚发生了什么,所以我决定在这里问一下。

提前致谢。

最佳答案

混合格式化和未格式化的输入充满了问题。在您的特定情况下,这一行:

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&)

关于c++ - cin.get() 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com