Задание:
"Вывести на экран пункты назначения и номера маршрутов обслуживаемых автобусов, марка которых введена с клавиатуры. Если таких нет, вывести на экран соответствующее сообщение".
Я вроде бы это реализовал, но выдает не найдено; я понял где у меня ошибка, но не могу понять как сделать чтобы не найдено не выводилось. И вот мне нужно, чтобы Не найдено не выводилось, а выводилось только найденное
#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;
}
Оформлю в виде ответа то что написал в комментарии. Нужно просто вынести вывод "не найдено" за цикл. Сейчас логика такая что на каждой итерации сравнивается строковый ключ и при равенстве выводятся значения, при неравенстве выводится "не найдено", а нужно выводить "не найдено" только один раз и только если не было ни одного совпадения ключа. Чтобы достигнуть правильного нужно создать переменную например 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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Числа будут в комбобоксах и нужно чтобы допустим если месяц такой то то дней в этом месяце столько тоже самое про год
Добрый деньРешаю задачи на с++, но не могу дорешать из-за некоторых ошибок:"multiple definition of 'main' " Помогите справиться с этим,пожалуйста
Я сделал функцию для ввода логина/пароля и хотел, чтобы пароль скрывался звездочками, а выводились бы логин и пароль в формате login:passwordНо в конце...