2011-01-30 113 views
0

如果我有下面的C++代码:C++ while循环和字符串长度

#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

UPDATE:我要解决使用string功能

感谢的问题。

+0

我认为它会得到一个“编译时间错误”。什么是s? – 2011-01-30 13:34:29

+0

@Javed Akram。我修改了```,但问题是有效的。谢谢 – Simplicity 2011-01-30 13:50:05

回答

1

编写代码这种方式并在第4行设置一个断点:

std::string str; 
    while (std::cin >> str) 
    { 
    std::cout << "you typed: " << str << "\n"; 
    std::cout << "str.length(): " << str.length() << "\n";; 
    } 
0

while循环,std::cin>>str将返回true如果std::cin成功地将数据读入str,否则它将返回false

由于std::cin可以随时从输入流中读取数据,也就是说,while(std::cin >> str)将是一个无限循环,除非您按下某个生成EOF字符的键。产生EOF的键的组合取决于OS.还有一件事可以产生EOF,也就是如果关闭输入流!

2

因为“输入”产生“载体返回”符号。它是不可见的,只是开始新的路线。 您可以使用istream对象并使用get()函数,它返回读取的字符数:

char ch;

而(cin.get(CH)) { }

0

输入:

std::cin>>str 

从该流读取分离字一个[白色]空间。
白色空间包括(空格/制表符和新行)。

这意味着它会忽略所有空白区域,直到它获得非空白字符。然后它读取字符,直到获得空白字符。

因此,如果你只是命中新行(输入),它会忽略字符。它会一直忽略,直到听到一个字。

如果你想让循环完成。你有两个选择。寻找一个特殊的词。或者将一个EOF字符注入到流中。在Unix/Linux上,这是通过<ctrl> -D在WIndows <ctrl> -Z