Нужно ввести группу. Далее перебрать структура, найти запись с совпадающей группой и вывести её.
struct TZap{
char n_group[5];
} Zap;
char kodG[5];
scanf("%s", &kodG); // ввод группы для сравнения
for (i=0; i < kol-1; i++) { // Цикл перебора
if(mas_Z[i].n_group == kodG) { // Проверка на совпадение
Out(mas_Z[i]); // Передает в функцию запись для вывода
}
}
Делал проверку, цикл выполняется нужное количество раз, а вот условие вообще ни разу.
Почему я не могу сделать сравнение mas_Z[i].n_group == kodS
?
P.S. Ввел небольшое недрзумение с kodS
. Всё из-за моей невнимательности.
kodS
заменил на kodG
.
UPDATE
if(strncmp (mas_Z[i].n_group, kodG,1)==0)
puts ("TRUE");
else
puts ("FALSE");
Возвращает "TRUE".
Если использовать strcmp
:
strcmp(mas_Z[i].n_group, kodG);
Возвращает 0
. Это положительный результат проверки
Использование оператора &
с форматом %s
в scanf
- почти всегда ошибка
scanf("%s", &kodG);
Что здесь делает этот &
?
Либо
scanf("%s", kodG);
либо (если угодно)
scanf("%s", &kodG[0]);
но ни в коему случае не то, что у вас. "На практике" ваш вариант может работать, но это не повод писать подобное.
Использование массива размером всего 5 для пользовательского ввода через scanf("%s"
- это серьезная заявка на переполнение буфера со всеми вытекающими. Сделайте хотя бы
scanf("%4s", kodG);
Сравнение С-строк в С++ делается так же как и в С: функцией strcmp
.
if (std::strcmp(mas_Z[i].n_group, kodG) == 0)
Почему я не могу сделать сравнение mas_Z[i].n_group == kodG
Кто вам такое сказал? Вы можете сделать такое сравнение. Только сравнивать оно будет не содержимое строк, а значения двух указателей (и они, разумеется, будут не равны). А уж что именно вы хотели сравнить - строки или указатели - это у вас надо спрашивать. Компилятор за вас додумывать не будет, он просто делает то, что вы ему сказали делать.
Вам нужна std::strcmp
.
Но вообще, если это С++ (судя по тегу), то может иметь смысл избавиться от массивов символов и перейти на std::string
.
Как в соседнем ответе заметили, в scanf("%s", &kodG);
символ &
- лишний. Хотя он здесь создает неопределенное поведение, на практике на работу программы он влиять не должен, по идее.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Работаю на Mac, использую XcodeЯ решил попробовать поработать с библиотекой alut
Пытаюсь создать объект сокетаПоявляется такая ошибка: