字符数组长度函数对于1,2,3和ENTER返回5,否则看起来很好

时间:2018-07-08 17:40:56

标签: c arrays

我正在编写一个C程序来删除输入文本行尾的空白。 sudo代码如下,

  

将每个字符读入一个字符数组
  向后循环遍历数组
  遇到'\ n'后,请删除所有前面的空格,直到找到数字/字母字符

为此,我正在编写一个返回数组长度的函数,因此程序知道向后循环时从哪里开始。

这个长度函数似乎表现得很奇怪。

大部分时间都可以使用。我单击在代码块中运行并运行。弹出一个控制台,我输入一些文本,然后按CTR + D,并返回一个数字,表示输入到控制台中的所有字符的长度。

如果我输入123,程序将返回3,这很有意义。如果我输入12 ENTER,程序将返回3,这与C语言中的1,2,'\n'同样有意义。

但是由于某些原因,如果我输入123 ENTER,则程序返回5,而我期望是4(1,2,3,'\n')。

据我所知,只有三个字符和换行符才是这种情况。

知道为什么吗?

我的代码:

#include <stdio.h>
#define MAX 1000

int array_length(char array[]);

int main()
{
    int i, c;
    char condensed_array[MAX];

    i = 0;
    while((c=getchar()) != EOF){
        condensed_array[i] = c;
        ++i;
    }

    printf("\n%d", array_length(condensed_array));

    return 0;
}

int array_length(char s[])
{
    int j;
    j=0;

    while(s[j] != '\0')
        ++j;

    return j;
}

1 个答案:

答案 0 :(得分:2)

通过以下操作为array_length提供战斗机会:

while((c=getchar()) != EOF){
    condensed_array[i] = c;
    ++i;
}
condensed_array[i] = 0;

将零添加到数组的末尾!

我想array_length

中的行
 while(s[j] != '\0')

应该是

while(s[j] != 0)