在处理数组时,你会在哪里添加+1?

时间:2017-05-11 12:49:22

标签: c arrays printf

由于数组从零而不是一开始,我想在我的代码中明确表示我要在计数器(i)中添加一个来弥补这一点。但是我的功能不是阅读我现在拥有的东西。

我对编码很新,所以我道歉,但我会回答任何问题;

do
{
    printf("\nMax # of characters?\n");
    fflush(stdin);
    scanf("%d", &x);
} while (x < 1 || x > 200);       

do
{

    printf("\nEnter Text:\n");

    enter[i] = getchar();
    i = 1;
    error = 0;

    do
    {
        printf("i = %d\n", (i - 1));
        c = getchar();
        enter[i] = c;
        i++;
    } while (c != '\n');

    if (i > (x + 1))   //<----------- Even though I added one because arrays start at [0]
    {                  //             the program still tells me 'i' (counter) is one 
                       //             more than it should be 

        printf("Words must not be longer than %d letters\n", x);

        printf("You entered %d letters\n", (i - 1)); // -1 to count for the '\n'
        error = 1;
    }

} while (error != 0);


printf("\nOutput: %s\n", enter);

return 0;

1 个答案:

答案 0 :(得分:3)

首先,您忘记初始化def get_serializer(self): return ActivateCustomerSerializer() 。第一个

i

是未定义的行为。

其次,enter[i] = getchar(); 是数组的索引。如果i是您允许输入的字符数,则x的合法字符应在i0之间。您还为x - 1增加了i,因此合法\n受到

的约束
i

因此,如果0 <= i <= x 不是i > x

,则应打印出您的错误消息

脚注:如果你想知道为什么我们从零开始索引,而且任何告诉你我们应该从一个索引的人都是错的,那么我只能指出Edsgar Dijkstra的最终论文Why Numbering Should start at Zero