计算数组中元音数量的问题
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=]'
)会自动添加到它的末尾。虽然在你的情况下问题不大,因为元音的数量可能会保持不变,但在其他情况下,它很容易出现错误。
#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=]'
)会自动添加到它的末尾。虽然在你的情况下问题不大,因为元音的数量可能会保持不变,但在其他情况下,它很容易出现错误。