while循环中的cin.getline

问题描述 投票:0回答:1

我正在做学校作业,基本上,当您输入VIP时,应该完成VIP ++。当我将cin.getline放入while循环时,它甚至都不会生成。 Getline通常可以在其他代码中工作,但这次我不理解。有人能帮我吗?

代码:

    enter code here

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#include <cmath>

int main()
{

int istok=0, zapad=0, loza=0, vip=0, mladi=0;

    cout<<"Unesite I za istok, Z za zapad, L za lozu, VIP za VIP (rofl), M za djecu i mlade."<<endl;

    char unos5;

    while(unos5 != 'K'){
            cin.getline(unos5, 5);

            if(unos5 == 'I'){
                    istok++;
            }

            else if(unos5 == 'Z'){
                    zapad++;
            }

            else if(unos5 == 'L'){
                    loza++;
            }

            else if(unos5 == 'VIP'){
                    vip++;
            }

            else if(unos5 == 'M'){
                    mladi++;
            }

            /*else if(unos5 != 'I' || 'Z' || 'L' || 'VIP' || 'M'){
                    cout<<"Unjeli ste krivo! Pokusajte ponovno."<<endl;
                    cin>>unos5;
            }*/

            else if(unos5 == 'K'){
                    break;
            }


    }

    cout<<"Ukupna zarada od prodanih ulaznica je "<<istok*60+zapad*80+loza*100+vip*500+mladi*20<<" kn."<<endl;

    return 0;
}
c++ getline
1个回答
0
投票

首先coutcinendlstd命名空间中,因此您需要在std::之后在using std::cout;之前添加#include之类的行。 >

关于您的代码,getlineistream成员(cin的类型)需要一个char数组,但是您仅定义一个char。我建议不要使用char数组,而应使用自由函数getline,该函数获取要读取的流作为参数,并将结果存储在std::string中,这样可以更安全,更轻松地进行处理。由于您没有使用<cstring>,并且getline<string>中,因此我更改了#include

同样,您的“ VIP”无法做些有用的事情。这是三个字符合而为一,不起作用。您需要一个字符串(双引号,而不是单引号)。

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <string>
#include <cmath>

using std::cout;
using std::endl;

int main()
{

    int istok = 0, zapad = 0, loza = 0, vip = 0, mladi = 0;

    cout << "Unesite I za istok, Z za zapad, L za lozu, VIP za VIP (rofl), M za djecu i mlade." << endl;

    std::string unos5;

    while (unos5 != "K") {
        std::getline(std::cin, unos5);

        if (unos5 == "I") {
            istok++;
        }

        else if (unos5 == "Z") {
            zapad++;
        }

        else if (unos5 == "L") {
            loza++;
        }

        else if (unos5 == "VIP") {
            vip++;
        }

        else if (unos5 == "M") {
            mladi++;
        }

        /*else if(unos5 != 'I' || 'Z' || 'L' || 'VIP' || 'M'){
                cout<<"Unjeli ste krivo! Pokusajte ponovno."<<endl;
                cin>>unos5;
        }*/

        else if (unos5 == "K") {
            break;
        }


    }

    cout << "Ukupna zarada od prodanih ulaznica je " << istok * 60 + zapad * 80 + loza * 100 + vip * 500 + mladi * 20 << " kn." << endl;

    return 0;
}

请注意,写入endl具有写入'\ n',然后在输出流上调用flush()的效果。如果不需要flush(),则只应写'\ n'。

© www.soinside.com 2019 - 2024. All rights reserved.