如何在不使用 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
附: - 由于编码竞赛中适用的一些编码限制,我无法使用getline
、string
库
【问题讨论】:
什么是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++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?
我已经安装了 OpenCV C++。我可以在不重新安装库的情况下在 Python 中使用它的功能吗?
如何在不使用 getline() 的情况下接受不同行中的整数输入值?