Сравнение строк со структурным элементом

0

У меня есть такой код в файле.c, который определяет, является ли tPerson.name равным одному из элементов const char * names [COUNT] или нет:

define COUNT 3
...
typedef struct {
int age;
char *name;
} tPerson;

const char* names[COUNT] = {
    "xxx", "yyy", "zzz"
};
....
char string[128];
strcpy(string, tPerson.name);//tPerson.name is already initizialed
int counter = 0;
while (counter != COUNT) {
    if (strcmp(names[counter], string) == 0) {
        counter++;
        return 0;
    }
}
...

Все необходимые библиотеки включены. Компилятор не обнаруживает никаких ошибок или предупреждений, но программа не работает так, как должна - ничего не делает после выполнения. Этот фрагмент кода является лишь частью огромной программы, поэтому я хотел бы знать, правильна ли эта конструкция, а где-то еще в программе ошибка или нет. благодаря

  • 0
    Какой смысл counter++ в вашем цикле после оператора return?
  • 0
    это уже исправлено, во всяком случае это не было главной проблемой .. до сих пор не работает
Показать ещё 3 комментария
Теги:

2 ответа

5

Вы хотите продолжить цикл, если нет совпадения. Поставьте выражение counter++; вне оператора if:

while (counter != COUNT) {
    if (strcmp(names[counter], string) == 0) {
        return 0;
    }
    counter++;
}

И используйте size_t для counter вместо int: size_t counter = 0;

1

У вас есть return 0 перед увеличением счетчика

if (strcmp(names[counter], string) == 0) {
    return 0;
    counter++;
}
  • 0
    да спасибо, ИСПРАВЛЕНО - но все еще не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню