cin.getline в цикле while - PullRequest
       18

cin.getline в цикле while

0 голосов
/ 23 февраля 2020

Я делаю домашнюю работу для школы, и в основном, когда вы вводите "VIP", vip++ должно быть сделано. Он даже не сработает, когда я введу cin.getline, пока l oop. 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;
}

1 Ответ

1 голос
/ 23 февраля 2020

Прежде всего cout, cin и endl находятся в пространстве имен std, поэтому вам нужно либо добавить к ним std:: строк добавления, например using std::cout; после #include s.

Что касается вашего кода, член getline для istream (тип cin) требует массив символов, но вы определяете только символ. Я предлагаю не использовать массивы символов, а использовать бесплатную функцию 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.

...