计算数组中元音数量的问题

Problems counting the number of vowels in an array

#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

abracadabra

pear tree

o a kak ushakov lil vo kashu kakao

my pyx

riszky hermawan

当我运行代码时,它显示:

5 4 13 12 12

看到问题了吗?这是错误的答案” 输出必须是这样的

5 4 13 2 5

由于您的代码使用函数 fgets 来读取文件内容,因此函数 vowel_count 不应遍历 50 数组字符。某些行(从文件中读取)的长度可能不同。因此,迭代超过 50 个字符可能会从内存中获取 随机 值,其中可能包括元音。

因此您只需要修改函数vowel_count,即更改:

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

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

此外,IMO 最好这样做:

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

而不是

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

您不需要硬编码数组的大小,因为当您编写 char vowel[] = "aiueoyAIUEOY" 时,终止字符(即 '[=19=]')会自动添加到它的末尾。虽然在你的情况下问题不大,因为元音的数量可能会保持不变,但在其他情况下,它很容易出现错误。