Проблемы с подсчетом количества гласных в массиве

      #include <stdio.h>

int vowel_count(char n[]){

    int hasil = 0;
    char vowel[] = "aiueoyAIUEOY";
    for (int i = 0; i < 50; i++)
    {
        for (int x = 0; x < 12; x++)
        {
            if (n[i] == vowel[x])
            {
                hasil++;
            }
        }
    }
    return hasil;
}

int main(void){
    int amount;
    char values[50], unknown[10];
    char vowel[] = "AIUEOYaiueoy";
    FILE* fp = fopen("zValues.txt", "r");
    fscanf(fp, "%d", &amount);
    fgets(unknown, 10, fp);
    for (int n = 0; n < amount; n++)
    {
        fgets(values, 50, fp);
        printf("%d ", vowel_count(values));
    }
    fclose(fp);
}

вот zValues.txt:

5

абракадабра

груша

оа как ушаков лил во кашу какао

мой pyx

рискованный Hermawan

когда я запускаю код, он показывает:

5 4 13 12 12

видите проблему? это неправильный ответ "выход должен быть таким

5 4 13 2 5

1 ответ

Решение

Поскольку ваш код использует функцию fgets для чтения содержимого файла, функция не должна перебирать символы массива. Некоторые строки (прочитанные из файла) могут иметь разную длину. Следовательно, итерация за пределами 50символы могут извлекать из памяти случайные значения, которые могут включать гласные.

Поэтому вам просто нужно адаптировать функцию vowel_count, а именно изменение:

      for (int i = 0; i < 50; i++)

к

      for (int i = 0; n[i] != '\0'; i++)

Более того, IMO лучше делать:

      for (int x = 0; vowel[x] != '\0'; x++) 

вместо

      for (int x = 0; x < 12; x++)

Вам не нужно жестко указывать размер массива, потому что когда вы пишете char vowel[] = "aiueoyAIUEOY", конечный символ (т.е. '\0') добавляется автоматически в конце. Хотя в вашем случае это не очень проблематично, потому что количество гласных, вероятно, останется прежним, в других случаях это подвержено ошибкам.

Другие вопросы по тегам