cin.getline 在 while 循环中

cin.getline in while loop

我正在做学校作业,基本上你输入"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;
}

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

关于你的代码,istreamgetline成员(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'。