Нужно ввести группу. Далее перебрать структура, найти запись с совпадающей группой и вывести её.
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);
символ &
- лишний. Хотя он здесь создает неопределенное поведение, на практике на работу программы он влиять не должен, по идее.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Работаю на Mac, использую XcodeЯ решил попробовать поработать с библиотекой alut
Пытаюсь создать объект сокетаПоявляется такая ошибка: