на языке си спросите пользователя о его имени , если имя есть в базе данных ,выведите “добро пожаловать (имя)”, если нет, выведите “имя отсутствует в базе данных

#arrays #c #string #if-statement

Вопрос:

Я написал приведенный ниже код на языке си, но проблема в том, что (если) всегда выдает мне ложь

 char DB[][50]={"ahmed alla","Shady Ibrahim","Sara Sedky","Mohamed Ezz"};
    char name[50];
    fgets(name,50,stdin);
    int flag=1;
    for(int i=0;i<4;i  )
    {
        if(name==DB[i])
        {
            flag=0;
            printf("welcome %s n",name);
        }
    }
    if(flag)
    {
        printf("sorry your name is not in the DB!");
    }
 

он всегда печатает «извините, вашего имени нет в базе данных!», как бы оно ни называлось

Комментарии:

1. Я думаю, вам следует использовать strcmp вместо ==. И fgets всегда добавляет новую строку после введенной строки.

2. if(name==DB[i]) —> if (strcmp(name, DB[i]) == 0)

Ответ №1:

Два момента:

Во-первых, fgets() считайте символ новой строки допустимым символом и включите его в строку, скопированную в переданный буфер. Обязательно удалите завершающий символ новой строки из name буфера. После fgets() этого , возможно, вы сможете сделать

 name[strcspn(name, "n")] = 0;
 

Документация по strcspn.

Во-вторых, в C , используйте strcmp() для сравнения двух строк

 if (strcmp (name, DB[I]) == 0) {
  // strings are same
 

Документация по strcmp