我正在尝试创建一个程序来计算字符串中的元音。打印 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/