Печать искомой строки - PullRequest
0 голосов
/ 15 января 2019

Я хочу найти имя из списка имен и, если оно найдено, я должен вернуть всю информацию об этом человеке, который еще не найден. Я не знаю, почему мой код не работает. Я могу распечатать информацию о человеке, например:

Введите:

3
Steve 9812761810 017
Wayne 8299915781 102
Ronnie 9161462903 120
Wayne 

Выход:

Wayne 8299915781 102
#include <iostream>
#include <string.h>
using namespace std;

int main() {
  string name[100];
  long long number[100];
  int year[100], i, n, check = 0;
  string inp;
  cin >> n;
  for (i = 0; i < n; i++) {
    cin >> name[i] >> number[i] >> year[i];
  }
  cin >> inp;
  for (i = 0; i < n; i++) {
    if (inp == name[i]) {
      check = 1;
    }
  }
  if (check == 0)
    cout << "Info Not found";
  else
    cout << "The Entered Name is found";
  for (i = 0; i < n; i++) 
    cout << name[i] << number[i] << year[i];
  return 0;
}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

После чтения целого числа из входного потока, вы должны использовать cin.ignore(); перед чтением любых строк из входного потока.

cin.ignore(); игнорирует символ "новая строка".

Ваш модифицированный код:

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

int main() {
  string name[100];
  long long number[100];
  int year[100], i, n, check = 0;
  string inp;
  cin >> n;
  cin.ignore();
  for (i = 0; i < n; i++) {
    cin >> name[i] >> number[i] >> year[i];
    cin.ignore();
  }
  cin >> inp;
  for (i = 0; i < n; i++) {
    if (inp == name[i]) {
      check = 1;
    }
  }
  if (check == 0)
    cout << "Info Not found";
  else
    cout << "The Entered Name is found";
  for (i = 0; i < n; i++) 
    cout << name[i] << number[i] << year[i];
  return 0;
}

Подробнее читайте здесь: Использование getline (cin, s) после cin

0 голосов
/ 15 января 2019

В конце программы вы игнорируете значение check и просто печатаете все в своем списке независимо от того, было ли введенное имя действительно найдено или нет.

Попробуйте вместо этого что-нибудь еще:

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

int main() {
    string name[100];
    long long number[100];
    int year[100], i, n, idx = -1;
    string inp;

    cin >> n;
    for (i = 0; i < n; i++) {
        cin >> name[i] >> number[i] >> year[i];
    }

    cin >> inp;
    for (i = 0; i < n; i++) {
        if (inp == name[i]) {
            idx = i;
            break;
        }
    }

    if (idx == -1)
        cout << "Info Not found";
    else {
        cout << "The Entered Name is found: ";
        cout << name[idx] << " " << number[idx] << " " << year[idx];
    }
    return 0;
}

Вы также можете рассмотреть возможность использования struct для лучшей организации ваших данных, например:

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

struct myData {
    string name;
    long long number;
    int year;
};

istream& operator>>(istream &is, myData &data) {
    is >> data.name >> data.number >> data.year;
    return is;
}

ostream& operator<<(ostream &os, const myData &data) {
    os << data.name << " " << data.number << " " << data.year;
    return os;
}

int main() {
    myData data[100];
    int i, n, idx = -1;
    string inp;

    cin >> n;
    for (i = 0; i < n; i++) {
        cin >> data[i];
    }

    cin >> inp;
    for (i = 0; i < n; i++) {
        if (inp == data[i].name) {
            idx = i;
            break;
        }
    }

    if (idx == -1)
        cout << "Info Not found";
    else
        cout << "The Entered Name is found: " << data[idx];

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...