Проблемы с подсчетом количества гласных в массиве
#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'
) добавляется автоматически в конце. Хотя в вашем случае это не очень проблематично, потому что количество гласных, вероятно, останется прежним, в других случаях это подвержено ошибкам.