如果我有以下C ++代码:
#include <iostream>
#include <string>
int main()
{
std::string str;
while (std::cin>>str)
std::cout<<str<<"\n";
std::cout<<str.length(); // UPDATE: str.length
return 0;
}
当我运行该程序但未键入string
并按Enter
时,我会收到empty
输出。这是否意味着while
循环已经运行并且认为有input
即使它是空的?
如何终止此循环?
最后,为什么我的输出中没有得到字符串的length
?
更新 我想使用string
函数来解决问题
感谢。
答案 0 :(得分:2)
因为“输入”产生“载体返回”符号。它是看不见的,只是开始新的一行。 您可以使用istream对象并使用get()函数,该函数返回读取的字符数:
char ch;
而(cin.get(CH)) { }
答案 1 :(得分:1)
以这种方式编写代码并在第4行设置断点:
std::string str;
while (std::cin >> str)
{
std::cout << "you typed: " << str << "\n";
std::cout << "str.length(): " << str.length() << "\n";;
}
答案 2 :(得分:0)
在while
循环中,如果std::cin>>str
成功将数据读入true
,std::cin
将返回str
,否则它将返回false
。
由于std::cin
始终可以从输入流中读取数据,这意味着while(std::cin >> str)
将是一个无限循环,除非您按某个生成EOF字符的键。产生EOF的键的组合取决于操作系统。还有一件事可以产生EOF,即关闭输入流!
答案 3 :(得分:0)
输入:
std::cin>>str
从流中读取一个 [white] 空格分隔的单词 白色空间包括(空格/制表符和新行)。
这意味着它会忽略所有空格,直到它获得非空白字符。然后它会读取字符,直到它获得空格字符。
因此,如果您只是点击换行符(输入),它将忽略该字符。它一直无视,直到找到一个字。
如果你想完成循环。你有两个选择。寻找一个特殊的词。或者将EOF字符注入流中。在Unix / Linux上,这是在WIndows&lt; ctrl&gt; -Z
上使用&lt; ctrl&gt; -D完成的