c - 为什么数组元素存储的是 n-1 而不是 n 的值

标签 c arrays

我正在尝试编写一个程序,将每个单词的长度存储在一个 数组并打印出来。但是长度 n 没有打印出来,而是打印出长度 n - 1

#include <stdio.h>

#define IN 1
#define OUT 0
#define MAXLENGTH 10

int main(void)
{
    int i, c, state, word;
    int array[MAXLENGTH];

    state = OUT;
    word = 0;

    for (i = 0; i < MAXLENGTH; i++)
        array[i] = 0;

    while ((c = getchar()) != EOF)
    {
        if (c == '\n' || c == ' ')
            state = OUT;
        else if (state == IN)
        {
            ++array[word];
        }
        else if (state == OUT)
        {
            state = IN;
            ++word;
        }
    }

    for (i = 1; i < MAXLENGTH; i++)
        if (array[i] != 0)
            printf("cuvantu %d are %d caractere \n", i, array[i]);
}

最佳答案

考虑这段代码:

    if (c == '\n' || c == ' ')
        state = OUT;
    else if (state == IN)
    {
        ++array[word];
    }
    else if (state == OUT)
    {
        state = IN;
        ++word;
    }

c 是换行符或空格时,它会将状态更改为 OUT,大概意思是在单词之外。

c是另一个字符时:

  • 如果状态为IN,它通过递增array[word] 来计算字符数,它跟踪当前单词的长度。
  • 如果状态为 OUT,它将状态更改为 IN 并递增 word 以开始计算一个新单词。

在最后一种情况下,不计算当前字符——不对 array[word] 执行递增。要解决此问题,请在最后一种情况下插入 ++array[word];:

    if (c == '\n' || c == ' ')
        state = OUT;
    else if (state == IN)
    {
        ++array[word];
    }
    else if (state == OUT)
    {
        state = IN;
        ++word;
        ++array[word];
    }

关于c - 为什么数组元素存储的是 n-1 而不是 n 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063582/

相关文章:

c - printf 十六进制格式的 float 返回随机值

c - 关于 malloc,这个变量指向什么?

c - 使用字符指针将文本文件逐行存储到字符数组中

c - 从已卸载模块的 pdb 中提取结构信息

c - 动态大小的指向链表的指针数组

javascript - 将第一个元素移动到数组末尾的最快方法

ios - swift 3 通过字典中键的字符串值过滤字典数组

javascript - 在调用 sendToDevice 之前,将 Promise.All 与 Firebase Cloud Fxs 结合使用,用 FCM token 填充数组

java - 在Android中输入EditText并保存到数组时通过split函数分隔数字

c - c语言中如何将enter键表示为char?