C++ cin和while cin

int main(){
    
    string input;
    vector<string> arr;
    
    while(cin >> input)
    {
        cout << "start"<<endl;
        arr.push_back(input);
    }

    cout << arr[arr.size()-1].length() <<endl;
    return 0;
}

输入 has map 得到的结果是出现了两次start打印。这是为什么?
输入了\n的时候发生了什么? 实际上,cin的原理是将输入的内容放入缓冲区,每当遇到\n后,将缓冲区内容输入至程序。即,输入\n后,cin>>input会正式执行。
由于input的类型是string, 所以 cin会跳过空格类的字符。于是while循环体执行了两次循环,分别将has 和 map两个字符串输入至input中。
而如果没有while循环的话cin只会执行向input中输入遇到的第一个字符串,便会结束,所以会用到while(cin >> input)
while(cin >> input)遇到\n的时候实际上cin >> input就会执行,将缓冲区的所有字符串循环放入input中,然后执行循环体中的指令,执行完毕后重新回到循环体开头,等待下一次从键盘中输入的内容。
如果想终止循环体,则输入Ctrl+D。

所以求题目字符串最后一个单词的长度,可以直接用以下的代码完成:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
    
    string input;
    vector<string> arr;
    while(cin >> input)
    {
        arr.push_back(input);
    }
    cout << arr[arr.size()-1].length() <<endl;
    return 0;
}
posted @ 2020-10-02 17:47  goto2091  阅读(445)  评论(0编辑  收藏  举报