検索

ホームページ  >  に質問  >  本文

c++ - switch语句程序中的一个bug,但就是找不出在哪

程序意图是计算输入流中“ff”字符的数量,程序如下:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int Cnt=0;
    bool flag = false;
    string s;
    while (cin>>s)
        for(auto ch:s)
            switch (ch)
            {
                case 'f':
                    if (flag == true)
                        ++Cnt;
                    flag = true;
                    break;
                default:
                    flag = false;
                    break;
            }
    cout << "There are "<< Cnt << " ff(s)." << endl;
    return 0;
}

问题在于我输入f f(中间有空格,所以不算计数),输出仍然是1,怎么回事?

黄舟黄舟2806日前612

全員に返信(2)返信します

  • 巴扎黑

    巴扎黑2017-04-17 12:11:03

    cin读到空格会认为输入结束,所以你的 f f 实际上接收之后还是ff

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 12:11:03

    cin在ostream类中的三个输入方法不一样,cin类是从程序的输入缓冲队列中一个个读取字符。根据接受数据类型不同来判断字符的结束点。

    1. cin >> x, 忽略空格和回车认为输入结束

    2. cin.get()和cin.getline(), 不忽略空格

    返事
    0
  • キャンセル返事