2012-06-24 6 views
-2

У меня возникли проблемы с сопоставлением двух переменных, надеюсь, кто-то может помочь.Сравнение двух переменных в C

В основном то, что я делаю это:

printf("\n\n +* Introduza o %d Prato:", i + 1); 

scanf("%s", &pratos_novo->prato); 

ver=verifica_prato(pratos_novo->prato); 
    if(ver == 1) 
/*PROCESS*/ 

я поставил M1, когда его спросили, потому что она существует в .bin файл

вызов функции:

int verifica_prato(char* p) { 

    k = (struct item*) malloc(sizeof(item)); 
     while((fread(k, 1, sizeof(item), f)) != NULL) { 
      if((*k).id == p){ 
       fclose(f); 
       return 1; 
      } 
     } 
    fclose(f); 
    return 0; 
} 

Моя цель состоит в том, чтобы вернуться 1, когда я положил M1.

структура пункт:

struct item{ 
    char id[5]; 
    int ing[10]; 
    float qtd[10]; 
}; 

Проблема здесь: (*k).id==p), значения никогда не то же самое, и я 100% уверен, что M1 не существует в файле .bin.

+0

(1) 'while ((fread (k, 1, sizeof (item), f))! = NULL) {' fread() не возвращает указатель. (2) 'if ((* k) .id == p) {'. Сокращение для этого - 'if (k-> id == p)', и (3) p - указатель, поэтому вам понадобится strcmp()/memcmp(), как говорили другие. – wildplasser

ответ

1

Вы сравниваете указатели, когда вам нужно сравнить строки.

Замените if((*k).id==p) на if(strcmp((*k).id, p) == 0), чтобы сравнить строки.

+0

О, ты так прав !!! Большое спасибо. – DmitryK

0
if((*k).id==p) 

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

+0

ye, thx !!! получил это решение – DmitryK

Смежные вопросы