1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Работа со структурами

Тема в разделе 'C/C++', создана пользователем nom1nal, 13 июн 2013.

  1. TopicStarter Overlay

    nom1nal Moderator Команда форума Модератор Программист Пользователи

    Сообщения:
    356
    Лайки:
    117
    Пол:
    Мужской
    Репутация:
    0
    И так я написал одну из очередных программ для лабораторных работ, но опять возникла проблема.
    Сам код:
    Код:
    #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;
    }
    
    
    Но по какой то неизвестной для меня причине, при поиске необходимого человека экран консоли остается чистым.
    Скрин(для ускорения проверки сделал всего одного человека и ввел его фамилию):

    Вложения:

    • Лаба 7.png
      Лаба 7.png
      Размер файла:
      6 КБ
      Просмотров:
      90
  2. saxarok Пользователи

    Сообщения:
    14
    Лайки:
    3
    Репутация:
    0
    Код:
    if (search_familiya == massive.familia)
    Ты сравниваешь массивы char'ов, а сравнивая массивы таким образом, ты сравниваешь не их содержание, а указатели на них, а указатели на них различные.
    Юзай это http://www.cplusplus.com/reference/cstring/strcmp/
    З.Ы. Можно еще так
    Код:
    if (*search_familiya == *massive.familia)
    nom1nal и Kenpachi™ нравится это.
  3. Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Код:
    if (search_familiya == massive[i].familia)
    Rly? Это не php. (хотя сам так же первый раз сверял строку :D)

    Код:
    if (strcmp(search_familiya, massive[i].familia)==0){
    //твой код
    }
    nom1nal нравится это.
  4. TopicStarter Overlay

    nom1nal Moderator Команда форума Модератор Программист Пользователи

    Сообщения:
    356
    Лайки:
    117
    Пол:
    Мужской
    Репутация:
    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])
  5. Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    search_familiya[n]
    эм.. это n буква в поисковом слове
  6. saxarok Пользователи

    Сообщения:
    14
    Лайки:
    3
    Репутация:
    0
    оО
    Пример: ищешь Демидович, находишь Демидова. Реально лучше if (*search_familiya == *massive.familia) используй, суть та же, но сравнивает весь массив, ну и как то всё же человечнее.
  7. kodwi_dev Guest

    Репутация:
    0
    Люди, я в шоке.
    Код:
    if (*search_familiya == *massive[i].familiya)
    сравнит тебе нулевые символы массивов, а не весь массив. Для сравнения чаровских строк есть функция strcmp(char *str1, char *str2) из сишной либы string.h
  8. Homer Пользователи

    Сообщения:
    60
    Лайки:
    22
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    -

    [​IMG]
    &
    [​IMG]

    [​IMG]
Черновик сохранён Черновик удалён

Поделиться этой страницей