И так я написал одну из очередных программ для лабораторных работ, но опять возникла проблема. Сам код: Код: #include "stdafx.h" #include "iostream" const int arraySize = 1; using namespace std; int _tmain(int argc, _TCHAR* argv[]) { setlocale(0,"Rus"); struct Human { char name[20]; char familia[30]; char otchestvo[30]; int god_rozhdeniya; int ves; int rost; }; Human massive[arraySize]; for (int i = 0; i<arraySize;i++) { cout<<"Введите фамилию человека номер "<<i+1<<": "; cin>>massive[i].familia; cout<<"Введите имя человека номер "<<i+1<<": "; cin>>massive[i].name; cout<<"Введите отчество человека номер"<<i+1<<": "; cin>>massive[i].otchestvo; cout<<"Введите год рождения человека номер "<<i+1<<": "; cin>>massive[i].god_rozhdeniya; cout<<"Введите вес человека номер "<<i+1<<": "; cin>>massive[i].ves; cout<<"Введите рост(см) человека номер "<<i+1<<": "; cin>>massive[i].rost; } cout<<"Введите 1 если хотите искать по фамилии\n"; cout<<"Введите 2 если хотите искать по возрасту\n"; int search; char search_familiya[30]; int search_vozrast; int search_vozrast2; cin>>search; if (search == 1) { cout<<"Введите фамилию: "; cin>>search_familiya; for (int i = 0; i< arraySize; i++) { if (search_familiya == massive[i].familia) { cout<<"Фамилия: "<<massive[i].familia; cout<<"Имя: " <<massive[i].name; cout<<"Отчество: "<<massive[i].otchestvo; cout<<"Год рождения"<<massive[i].god_rozhdeniya<<"("<<2013-massive[i].god_rozhdeniya<<")"; cout<<"Вес: "<<massive[i].ves; cout<<"Рост: "<<massive[i].rost; } } } else if (search == 2) { cout<<"Введите возраст: "; cin>>search_vozrast; for (int i = 0; i< arraySize; i++) { search_vozrast2 = (2013 - search_vozrast); if (search_vozrast2 == massive[i].god_rozhdeniya) { cout<<"Фамилия: "<<massive[i].familia; cout<<"Имя: " <<massive[i].name; cout<<"Отчество: "<<massive[i].otchestvo; cout<<"Год рождения"<<massive[i].god_rozhdeniya<<"("<<2013-massive[i].god_rozhdeniya<<")"; cout<<"Вес: "<<massive[i].ves; cout<<"Рост: "<<massive[i].rost; } } } else { cout<<"По вашему запросу ничего не найдено!"; } system("pause"); return 0; } Но по какой то неизвестной для меня причине, при поиске необходимого человека экран консоли остается чистым. Скрин(для ускорения проверки сделал всего одного человека и ввел его фамилию):
Код: if (search_familiya == massive.familia) Ты сравниваешь массивы char'ов, а сравнивая массивы таким образом, ты сравниваешь не их содержание, а указатели на них, а указатели на них различные. Юзай это http://www.cplusplus.com/reference/cstring/strcmp/ З.Ы. Можно еще так Код: if (*search_familiya == *massive.familia)
Код: if (search_familiya == massive[i].familia) Rly? Это не php. (хотя сам так же первый раз сверял строку ) Код: if (strcmp(search_familiya, massive[i].familia)==0){ //твой код }
Проблему решил по другому. Я и впрям жестоко тупанул. Я сверял сами массивы типа char, а нужно было проверить их содержимое. И эту проблему я решил следующим образом: вместо Код: if (search_familiya == massive[i].familia) вставил Код: if (search_familiya[0] == massive[i].familia[0] && search_familiya[1] == massive[i].familia[1] && search_familiya[2] == massive[i].familia[2] && search_familiya[3] == massive[i].familia[3] && search_familiya[4] == massive[i].familia[4] && search_familiya[5] == massive[i].familia[5])
оО Пример: ищешь Демидович, находишь Демидова. Реально лучше if (*search_familiya == *massive.familia) используй, суть та же, но сравнивает весь массив, ну и как то всё же человечнее.
Люди, я в шоке. Код: if (*search_familiya == *massive[i].familiya) сравнит тебе нулевые символы массивов, а не весь массив. Для сравнения чаровских строк есть функция strcmp(char *str1, char *str2) из сишной либы string.h