【问题标题】:How to Take Input String till End Of Line in C++ without the Use of getline如何在不使用 getline 的情况下在 C++ 中将输入字符串直到行尾
【发布时间】: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循环也不会退出跨度>
  • 这是我的猜测,但是如果不需要猜测,您将更容易得到答案。只需将最后一条评论编辑到您的问题中

标签: c++ string input character


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2017-12-19
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多