#include
#include
#include
using namespace std;
struct TRAIN
{
char destination[25];
int number;
char time[25];
};
int main()
{
TRAIN data[25];
for(int i=0;i<3;i++)
{
if(i==0)
cout << "Введите место назначения : ";
else
{
cout << "\nВведите место назначения : ";
cin >> data[i].destination;
cout << "Введите номер поезда : ";
cin >> data[i].number;
cout << "Введите время отправления : ";
cin >> data[i].time;
}
}
for (int i = 0; i < 25 - 1; i++)
for (int j = i + 1; j < 25; j++)
if (strcmp(data[i].destination,data[i+1].destination)>0) {
TRAIN tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
char time2[25];
bool flag = false;
cout << "\nВведите желаемое время : ";
cin >> time2;
for(int i=0;i<3;i++)
{
if(strcmp(data[i].time,time2)>0)
{
cout << endl << " Поезд #" << data[i].number << " отправляется в город " << data[i].destination << " в " << data[i].time << ".";
flag = true;
}
}
if(!flag)
{
cout << "\nТаких поездов нет!";
}
cout << endl << endl;
system("pause");
return 0;
}
Другие языки программирования и технологии
Почему не работает strcmp?
1
Я погляжу народ тут совсем учиться не желает, и живет wchar_t фобиями, гадая на кофейной гуще.
Повторюсь еще раз - необходимо четко различать в какой кодировке находятся ваши символы и строки:
Символьные и строковые литералы будут иметь туже кодировку, что и файл.
Внешние источники данных (БД, файлы, сеть и т. д.) - нужно указывать соответствующую кодировку и/или производить конвертацию вручную при необходимости.
Строки во время выполнения - при работе со сторонними библиотеками, использующих различную кодировку либо вообще не умеющей ей пользоваться.
По сабжу: разберем пример попроще, чтобы узнать где чего
//целевая система - windows, ибо у ТС вендовая консоль на скриншоте
#include
using namespace std;
int main()
{
//строка в кодировке CP1251, дефолтной для текстовых файлов в венде
const char* iName = "Санёк";
char oName[6];
//выводим сиволы в кодировке СP1251
cout << "Введите имя: ";
//получаем крякозяблы, ибо консоль в кодировке DOS 866
//вводим с консоли в той-же кодировке
cin >> oName;
//сравниваем строки побайтно, получаем фигню
cout <<strcmp(iName, oName)<<endl;
return 0;
}
что мы можем/должны сделать
#include
#include
using namespace std;
int main()
{
//строка в кодировке CP1251, дефолтной для текстовых файлов в венде
const char* iName = "Санёк";
char oName[6];
//чтобы вывести нормальный текст
//1. либо устанавливаем локаль для рантайма
//setlocale(LC_ALL, "russian_russia.1251"); //1
//2. либо устанавливаем нужную кодовую страницу для консоли
//SetConsoleOutputCP(1251); //2
cout << "Введите имя: ";
//3. чтобы ввести в корректной кодировке, ставим кодовую страницу для ввода
//SetConsoleCP(1251); //3
cin >> oName;
//сравниваем строки побайтно
cout <<strcmp(iName, oName)<<endl;
return 0;
}
PS. для изучения с нуля С++ как первого языка рекомендуемую учебник Липпмана.
PPS. Курим 14 главу Джосаттиса и вот этот фак
Я погляжу народ тут совсем учиться не желает, и живет wchar_t фобиями, гадая на кофейной гуще.
Повторюсь еще раз - необходимо четко различать в какой кодировке находятся ваши символы и строки:
Символьные и строковые литералы будут иметь туже кодировку, что и файл.
Внешние источники данных (БД, файлы, сеть и т. д.) - нужно указывать соответствующую кодировку и/или производить конвертацию вручную при необходимости.
Строки во время выполнения - при работе со сторонними библиотеками, использующих различную кодировку либо вообще не умеющей ей пользоваться.
По сабжу: разберем пример попроще, чтобы узнать где чего
//целевая система - windows, ибо у ТС вендовая консоль на скриншоте
#include
using namespace std;
int main()
{
//строка в кодировке CP1251, дефолтной для текстовых файлов в венде
const char* iName = "Санёк";
char oName[6];
//выводим сиволы в кодировке СP1251
cout << "Введите имя: ";
//получаем крякозяблы, ибо консоль в кодировке DOS 866
//вводим с консоли в той-же кодировке
cin >> oName;
//сравниваем строки побайтно, получаем фигню
cout <<strcmp(iName, oName)<<endl;
return 0;
}
что мы можем/должны сделать
#include
#include
using namespace std;
int main()
{
//строка в кодировке CP1251, дефолтной для текстовых файлов в венде
const char* iName = "Санёк";
char oName[6];
//чтобы вывести нормальный текст
//1. либо устанавливаем локаль для рантайма
//setlocale(LC_ALL, "russian_russia.1251"); //1
//2. либо устанавливаем нужную кодовую страницу для консоли
//SetConsoleOutputCP(1251); //2
cout << "Введите имя: ";
//3. чтобы ввести в корректной кодировке, ставим кодовую страницу для ввода
//SetConsoleCP(1251); //3
cin >> oName;
//сравниваем строки побайтно
cout <<strcmp(iName, oName)<<endl;
return 0;
}
PS. для изучения с нуля С++ как первого языка рекомендуемую учебник Липпмана.
PPS. Курим 14 главу Джосаттиса и вот этот фак
Готов поспорить на любую сумму, что strcmp работает корректно, как и документировано.
Соответственно, твой алгоритм - нет.
Соответственно, твой алгоритм - нет.
??
Ярик Ештокин
Выдает ошибку, а в ней жалуется на strcmp
Похожие вопросы
- Почему не работает программа?
- почему не работает сайт anwap org? кто нибудь знает аналоги этого сайта
- Почему программа работает некорректно при вводе цифры "0"?
- Написал небольшой код на делфи. Почему не работает?
- Почему не работает код?
- Почему не работает спам бот на вин 7,а на хп работает,из за чего может быть?
- Почему не работает интернет после установки Windows XP
- И снова вопрос про 3ds max.Почему не работает Boolean
- Почему программисты работают на дядю, когда сами могут создавать что-то и зарабатывать за счёт этого?
- Почему вы работаете программистом?