Другие языки программирования и технологии

Почему не работает strcmp?

#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;
}
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 главу Джосаттиса и вот этот фак
Константин Коровкин
Константин Коровкин
1 411
Лучший ответ
Готов поспорить на любую сумму, что strcmp работает корректно, как и документировано.
Соответственно, твой алгоритм - нет.
??
Ярик Ештокин Выдает ошибку, а в ней жалуется на strcmp