Мой вклад пропускается независимо от того, что я использую - PullRequest
2 голосов
/ 19 февраля 2020

Я пытаюсь, чтобы пользователь ввел три ввода: имя пользователя, идентификатор и альтернативный идентификатор. Если пользователь вводит возврат имени пользователя, программа должна завершиться. Если пользователь вводит имя пользователя и вводит возврат для следующих двух идентификаторов, ввод должен отображаться как недействительный. Я пытался использовать cin, fgets и get (я знаю, что get - это обычно плохое программирование). Когда я использовал cin, я пытался использовать cin.clear () и cin.ignore (), чтобы пропустить запись новой строки. Первый ввод всегда работает, но второй вызов ввода пропускается.

Фрагмент кода:

int main(){
    string name, altID, tempUWFID;
    char input;
    cout << "Name> ";   
//  if (cin.get() == '\n') - This was one way that I tried.
    if ((input = getchar()) == '\n')
        break;
    else 
        cin >> name;
    cout << "UWF ID> ";
    if ((input = getchar()) != '\n')
        cin >> tempUWFID;
    cout << "Alternate ID> ";
    if ((input = getchar()) != '\n')
        cin >>altID;
cout << "\nThank you for abusing my program, have a nice day!\n";

Вывод:

Welcome to Voter's Registration
Name> johnny
UWF ID> Alternate ID>
ad
Invalid UWF ID

Name>

Thank you for abusing my program, have a nice day!

Ожидаемый вывод:

Welcome to Voter's Registration
Name> johnny
UWF ID> somenumber 
Alternate ID> someothernumber
Invalid UWF ID

Name>

Thank you for abusing my program, have a nice day!

1 Ответ

3 голосов
/ 19 февраля 2020

Вот небольшая небольшая программа, которую я собрал, это решает вашу проблему?

сам cin может читать символы новой строки, а cin >> ... обрабатывает символы новой строки как пробел и игнорирует их. cin.getline(...) и std::getline(cin, ...) будут читать и удалять символы новой строки из cin, а затем прекращать чтение.

Посмотрите, работает ли это для вас.

#include <iostream>
#include <string>
using namespace std;

int main()
{
  string name = "";
  string uwfId = "";
  string altId = "";

  cout << "\nName> ";   
  getline(cin, name);
  if(name == "" )
    return 0;

  cout << "\nUWF ID> ";
  getline(cin, name);

  cout << "\nAlternate ID> ";
  getline(cin, name);

  if(uwfId == "" || altId == "")
  {
    cout << "\nInvalid!";
    return 1;
  }

  return 0;
}
...