C ++ while循环和字符串长度

时间:2011-01-30 13:30:26

标签: c++ string while-loop

如果我有以下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函数来解决问题

感谢。

4 个答案:

答案 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成功将数据读入truestd::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完成的