1
#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

胡言乱语

梨树

oa kak ushakov lil vo kashu kakao

我的 pyx

危险的赫玛万

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

5 4 13 12 12

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

5 4 13 2 5

4

1 回答 1

1

由于您的代码使用函数fgets来读取文件内容,因此该函数vowel_count不应遍历50数组字符。某些行(从文件中读取)可能具有不同的长度。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')会自动添加到它的末尾。尽管在您的情况下不是很成问题,因为元音的数量可能会保持不变,但在其他情况下,它很容易出现错误。

于 2020-12-30T15:19:38.240 回答