如何在不使用 getline 的情况下在 C++ 中将输入字符串直到行尾

Posted

技术标签:

【中文标题】如何在不使用 getline 的情况下在 C++ 中将输入字符串直到行尾【英文标题】:How to Take Input String till End Of Line in C++ without the Use of getline 【发布时间】:2018-05-03 08:54:51 【问题描述】:

我正在编写一个 C++ 程序 相同的输入字符串包括一个包含字母数字字符、符号、空格的字符串。 我需要输入直到表示输入字符串结束的行尾

尝试使用do while 如下所示,但while (value != '\n' || value != '\0'); 永远不会满足,即使按下进入后while循环也不会退出

do

    cin >> value;
    inputString.push(value);
 while (value != '\n' || value != '\0');

输入字符串示例 -

I am :IronnorI Ma, i

附: - 由于编码竞赛中适用的一些编码限制,我无法使用getlinestring

【问题讨论】:

什么是value?看起来不像字符串。 请提供minimal reproducible example 和错误消息。 “不起作用”没有描述您的问题 @Ron - 值是一个字符变量 @user463035818 不工作这里意味着条件while (value != '\n' || value != '\0');永远不会得到满足,即使在按下输入后while循环也不会退出跨度> 这是我的猜测,但是如果不需要猜测,您将更容易得到答案。只需将最后一条评论编辑到您的问题中 【参考方案1】:

cin >> value; 与所有格式化输入函数一样,会在查找下一个要读取的字符时跳过所有空格。空格包含'\n',因此永远不会被读取。

要读取所有个字符,包括空格,您可以改用cin.get(value)等无格式输入函数。

【讨论】:

我尝试用 cin.get(value) 替换 cin >> value 但我得到了类似的功能 感谢您指出 cin 会忽略空格 以后会对我有所帮助:) 您还必须检查其他答案。在实际阅读'\n' 时,while 条件也变得很重要。 :-)【参考方案2】:

while 条件永远不能为假而中断循环。

如果 value 等于 '\n' 或 '\0' 以外的任何其他字符,它显然是 true 并且循环将继续。

但是,假设值为 '\n'。条件将评估为while ('\n' != '\n' || '\n' != '\0'),因此while (false || true),因此while (true)

现在假设值为 '\0':while ('\0' != '\n' || '\0' != '\0') 等于 while (true || false) 等于 while (true)

您需要的(作为条件)类似于while (! (value == '\n' || value == '\0')) 或(可能更好)while (value != '\n' && value != '\0')

【讨论】:

我认为这不是问题所在,问题在于cin 忽略了下面@Bo Persson 指出的空格所以检查永远不会满足 这显然是问题的一部分。毕竟,您确实将 while 条件中的运算符从 OR 更改为 AND,不是吗? ;-) 是的,这也是问题的一部分,但是一旦我能够从输入中包含空格,就会更容易弄清楚。谢谢:)【参考方案3】:

必须忽略第一次输入时出现的空格'\n' 然后使用cin.get() 将整行作为字符串获取

cin >> noOfTestCases >> ws;

do

  cin.get(value);
  inputString.push(value);
 while (value != '\n' && value != '\0');

【讨论】:

以上是关于如何在不使用 getline 的情况下在 C++ 中将输入字符串直到行尾的主要内容,如果未能解决你的问题,请参考以下文章

如何在不进行硬编码的情况下在 C++ 中获取类数组的长度?

如何在不使用 C++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?

我已经安装了 OpenCV C++。我可以在不重新安装库的情况下在 Python 中使用它的功能吗?

如何在不使用 getline() 的情况下接受不同行中的整数输入值?

为啥我可以在不使用 std::getline 的情况下调用 getline?

如何在不使用 AudioQueueRef 的情况下在 AudioQueue 中设置音量?