gpt4 book ai didi

无法添加到数组中的整数

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:10 25 4
gpt4 key购买 nike

我正在尝试创建一个程序来计算字符串中的元音。打印 vowelsInString 时,所有值都保持为零。

#include <stdio.h>
#include <stdlib.h>

void printfArray(int array[]);

int main()
{
char stringToTest[] = {}, vowels[5] = {'a', 'e', 'i', 'o', 'u'};
int i, j, numOfVowels, vowelsInString[5] = {0, 0, 0, 0, 0};

numOfVowels = 0;

printf("Enter: ");
scanf("%c", &stringToTest);

for(i=0; i<sizeof(stringToTest); i++)
{
for(j=0; j<sizeof(vowels); j++)
{
if(stringToTest[i] == vowels[j])
{
numOfVowels++;
vowelsInString[j]++;
printf("%d",vowelsInString[j]);
}
}
}

printfArray(vowelsInString);
}

void printfArray(int array[])
{
int i;

for(i=0; i<=sizeof(array); i++)
{
printf("%d\n", array[i]);
}
}

貌似不符合第20行的if语句,为什么?

if(stringToTest[i] == vowels[j])

最佳答案

您的程序无法运行的原因是您声明 stringToTest 的方式:

char stringToTest[] = {}; // This is not standard C

此声明是创建零长度数组的 C 扩展。当您稍后获取它的大小时,您会得到零 ( demo ),因此程序永远不会进入循环。

要解决这个问题,请分配 stringToTest到某个最大尺寸,然后用 %s 阅读而不是 %c :

char stringToTest[100];
...
scanf("%99s", stringToTest);

使用 strlen而不是 sizeof获取最终用户输入的单词的实际长度:

size_t len = strlen(stringToTest);
for(i=0; i<len; i++)
...

printfArray也需要修复,因为 sizeof(array)返回系统上指针的大小。使用 <= 以您尝试的方式“修复”它在for循环而不是正确的 < “工作”是偶然的,因为你的数组的大小是五个。您应该从 main 传递尺寸,像这样:

void printfArray(int array[], size_t len) {
for (size_t i = 0 ; i != len ; i++) {
...
}
}

关于无法添加到数组中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com