Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

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

Задание:
"Вывести на экран пункты назначения и номера маршрутов обслуживаемых автобусов, марка которых введена с клавиатуры. Если таких нет, вывести на экран соответствующее сообщение".
Я вроде бы это реализовал, но выдает не найдено; я понял где у меня ошибка, но не могу понять как сделать чтобы не найдено не выводилось. И вот мне нужно, чтобы Не найдено не выводилось, а выводилось только найденное
#include "stdafx.h" #include #include #include
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<<"Введите пункт назначения: "<>key; SetConsoleCP(cp); for(i=0; i<5; i++){ if(strcmp(key, spisok[i].mar)==0){ cout<<"Введите пункт назначения: "< system("pause"); return 0; }


Ответ

Оформлю в виде ответа то что написал в комментарии. Нужно просто вынести вывод "не найдено" за цикл. Сейчас логика такая что на каждой итерации сравнивается строковый ключ и при равенстве выводятся значения, при неравенстве выводится "не найдено", а нужно выводить "не найдено" только один раз и только если не было ни одного совпадения ключа. Чтобы достигнуть правильного нужно создать переменную например found которая будет следить было ли найдено что-то в цикле и после цикла если found == false то вывести "не найдено".
Вот пример кода, как нужно обрабатывать найденность/ненайденность в цикле, можно запустить онлайн
#include 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; }

Комментариев нет:

Отправить комментарий