无法添加到数组中的整数

标签 c

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

相关文章:

c - 如何将 C block 与 Gtk 回调一起使用?

c - 如何以编程方式远程登录并通过TCP套接字发出命令?

c - Glib segfault g_free 哈希表

c - 为延迟要求高的程序实现快照功能

c - C中字符串压缩的ascii输出

c - 如何删除C中的结构条目

c - 开关盒不打印 c

C 代码在 Linux Debian 中编译失败

无法链接程序集和 c

c - OpenMP - 初始化一维数组