Поиск данных по введенному ключу

274
11 ноября 2017, 13:32

Задание:

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

Я вроде бы это реализовал, но выдает не найдено; я понял где у меня ошибка, но не могу понять как сделать чтобы не найдено не выводилось. И вот мне нужно, чтобы Не найдено не выводилось, а выводилось только найденное

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <Windows.h>
using namespace std;
struct busabroad{
    char punkt[10];
    int num;
    char mar[10];
    int price;
};
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n1=1, i, m;
busabroad spisok[5];
cout << "Введите данные" << endl;
for(int i=0;i<5;i++){
cout << n1++<<" форма"<< endl;
int cp=GetConsoleCP();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout <<"Введите пункт назначения: ";
cin>>spisok[i].punkt;
SetConsoleCP(cp);
int cp1=GetConsoleCP();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout <<"Введите номер маршрута: ";
cin>>spisok[i].num;
SetConsoleCP(cp1);
int cp2 = GetConsoleCP();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout <<"Введите марку автобуса: ";
cin>>spisok[i].mar;
SetConsoleCP(cp2);
int cp3=GetConsoleCP();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout <<"Введите стоимость проезда: ";
cin>>spisok[i].price;
SetConsoleCP(cp3);
}
cout <<"Список: "<< endl;
busabroad sch;
for(int i=0;i<5;i++){
    for(int j=i+1;j<6;j++)
        if(strcmp(spisok[i].punkt, spisok[j].punkt)>0)
        {
            sch=spisok[i];
            spisok[i]=spisok[j];
            spisok[i]=sch;}}
for(i=0;i<5;i++)
    { 
    cout<<"Введите пункт назначения: "<<spisok[i].punkt<<endl;
    cout<<"Введите номер маршрута: "<<spisok[i].num<<endl;
    cout<<"Введите марку автобуса: "<<spisok[i].mar<<endl;
    cout<<"Введите стоимость проезда: "<<spisok[i].price<<endl;
}
char key[5];
cout<<"Введите марку автобуса: "<<endl;
int cp=GetConsoleCP();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cin>>key;
SetConsoleCP(cp);
for(i=0; i<5; i++){
        if(strcmp(key, spisok[i].mar)==0){
        cout<<"Введите пункт назначения: "<<spisok[i].punkt<<endl;
            cout<<"Введите номер маршрута: "<<spisok[i].num<<endl;
            cout<<"Введите марку автобуса: "<<spisok[i].mar<<endl;
        }
        else 
            cout<<"Не найдено"<< endl;
        }

system("pause");
return 0;
}
Answer 1

Оформлю в виде ответа то что написал в комментарии. Нужно просто вынести вывод "не найдено" за цикл. Сейчас логика такая что на каждой итерации сравнивается строковый ключ и при равенстве выводятся значения, при неравенстве выводится "не найдено", а нужно выводить "не найдено" только один раз и только если не было ни одного совпадения ключа. Чтобы достигнуть правильного нужно создать переменную например found которая будет следить было ли найдено что-то в цикле и после цикла если found == false то вывести "не найдено".

Вот пример кода, как нужно обрабатывать найденность/ненайденность в цикле, можно запустить онлайн:

#include <iostream>
using namespace std;
int main() {
    bool found = false;
    for (int i = 0; i < 10; ++i) {
        if (i == 5) {
            cout << i << endl;
            found = true;
        }
    }
    if (!found) {
        cout << "Not found!" << endl;
    }
    return 0;
}
READ ALSO
Как сделать генератор даты на c++ [требует правки]

Как сделать генератор даты на c++ [требует правки]

Числа будут в комбобоксах и нужно чтобы допустим если месяц такой то то дней в этом месяце столько тоже самое про год

235
Не могу понять,почему выдает ошибку?

Не могу понять,почему выдает ошибку?

Добрый деньРешаю задачи на с++, но не могу дорешать из-за некоторых ошибок:"multiple definition of 'main' " Помогите справиться с этим,пожалуйста

263
Сокрытие символов при вводе пароля

Сокрытие символов при вводе пароля

Я сделал функцию для ввода логина/пароля и хотел, чтобы пароль скрывался звездочками, а выводились бы логин и пароль в формате login:passwordНо в конце...

330