首页 > 解决方案 > cin.getline 在 while 循环中

问题描述

我正在为学校做作业,基本上当你进入时"VIP"vip++应该完成。cin.getline当我放入while 循环时,它甚至不会构建。getline通常适用于其他代码,但这次我不明白。有人能帮我吗?

代码:

#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

解决方案


首先coutcinendl位于std命名空间中,因此您需要在它们前面加上s之后的std::添加行。using std::cout;#include

关于您的代码,(类型)的getline成员需要一个字符数组,但您只定义一个字符。我建议不要使用 char 数组,而是使用 free 函数,该函数获取要读取的流作为参数,并将结果存储在 a中,这样可以更安全、更轻松地处理。因为你没有使用并且在我改变了那个。istreamcingetlinestd::string<cstring>getline<string>#include

你的“贵宾”也不能做一些有用的事情。这三个字合二为一,是行不通的。您需要一个字符串(双引号,而不是单引号)。

#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'。


推荐阅读