Обновление / игнорирование значения C ++

0

Поэтому у меня есть это

int main(){
  string input;
  string lastName;
  string firstName;
  int age;
  int streetNum;
  string streetName;
  string town;
  string zipCode;
  float balance;
  Update(lastName, firstName, age, streetNum, streetName, town, zipCode, balance);
}

и вот функция Update

void Update(string &lastname, string &firstname, int &age, int &streetnum, string &streetname, string &town, string &zipcode, float &balance){
  cout << "Update the following, enter nothing to leave the same: " << endl;
  string input;

  cout << "Last name: ";
  getline(cin, input);
  if (input != "\n") { lastname = input; }

  cout << "First name: ";
  getline(cin, input);
  if (input != "\n") { firstname = input; }

  cout << "Age: ";
  getline(cin, input);
  if (input != "\n") { age = atoi(input.c_str()); }

  cout << "Street number: ";
  getline(cin, input);
  if (input != "\n") { streetnum = atoi(input.c_str()); }

  cout << "Street name: ";
  getline(cin, input);
  if (input != "\n") { streetname = input; }

  cout << "Town name:";
  getline(cin, input);
  if (input != "\n") { town = input; }

  cout << "ZipCode: ";
  getline(cin, input);
  if (input != "\n") { zipcode = input; }

  cout << "Balance: ";
  getline(cin, input);
  if (input != "\n") { balance = atof(input.c_str()); }

}

Моя цель - обновить значение или перейти к следующему значению, если вход "\n".

После запуска, и программа вызывает Update, она печатает "Last Name: First Name:" в той же строке, не позволяя пользователю вводить что-либо в lastname. Я понятия не имею, почему он это делает. Любые советы или подсказки по направлениям будут полезны.

  • 0
    Я не могу воспроизвести вашу проблему с кодом, который вы предоставили. Может быть, \n "застрял" в cin, который вы не обрабатывали где-то еще в вашем коде?
  • 1
    Вы использовали cin >> где-нибудь? Похоже, завершающий выпуск новой строки
Показать ещё 4 комментария
Теги:
parameter-passing
cin
getline

1 ответ

0

getline() не ждет ввода пользователя. Я верю, что если вам не сказали использовать getline(), вы можете использовать cin. Что будет выглядеть так:

cout<< "Lastname: ";
cin>>input;
if(input != " ")
{
    lastname= input;
}

Единственная проблема, которую я предвижу, заключается в том, что вы не сможете использовать "\n" в качестве условия для своих операторов if. В приведенном выше примере я использовал пробел как символ пропуска.

  • 1
    Я думаю, что он использует cin . Он просто передает cin на getline . Его код работает на меня.
  • 1
    getline() действительно ожидает ввода пользователя. Он не может get ничего, пока пользователь не введет его, и он будет блокироваться и ждать, если пользователь ничего не набрал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню