Нет правильного вывода при сравнении символов - PullRequest
1 голос
/ 28 мая 2020
#include <stdio.h>
#include <stdlib.h>

struct patients{
char last_name[15];
int passport_number;
char disease[30];
char doctors_last_name[15];
};

int main (){
int n,i;
char enter_doctors_last_name [15];



struct patients mas_struct[3]={{"Ivanov",5457401,"COVID-18","Davis"},{"Petrov",2864228,"COVID-19","Davis"},{"Petrova",63863380,"COVID-19","Dixon"}};
    printf("\nPatients:");
    printf("\n Last name  |   Passport number  | \tDisease   |   Doctor's last name ");
for (i=0;i<3;i++)
    printf("\n %s \t%d \t%s \t%s",mas_struct[i].last_name,mas_struct[i].passport_number,mas_struct[i].disease,mas_struct[i].doctors_last_name);
    printf("\n");
    printf("\nEnter doctor's last name:");
    scanf("%s", enter_doctors_last_name);
    printf("\nPatients:");

for (i=0;i<3;i++)
 if(mas_struct[i].doctors_last_name == enter_doctors_last_name)
    printf("\n %s \t%d \t%s \t%s",mas_struct[i].last_name,mas_struct[i].passport_number,mas_struct[i].disease,mas_struct[i].doctors_last_name);

return 0;
}

Проблемы со сравнением символов, это не работает, и я не могу подобрать правильные слова для поиска в Google.

В последних строках, когда я набираю "Дэвис" "или" Dixon " для enter_doctors_last_name

Вывод - это только пациенты

Я также пытался использовать , получает функция

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Вы должны использовать функцию strcmp() для сравнения строк.

2 голосов
/ 28 мая 2020

Вы не можете сравнивать строки с помощью оператора ==, используйте вместо него strcmp:

if (!strcmp(mas_struct[i].doctors_last_name,enter_doctors_last_name)){/*...*/}

scanf со спецификатором "%s" очень небезопасно, используйте вместо него "%14s", -1 символ должен зарезервировать место для нулевого конца.

Если вам нужны имена с более чем одним словом, вы должны использовать "%14[^\n]", читает все до тех пор, пока не будет найден символ новой строки.

...