【问题标题】:Why are the Elements of array not printing right?为什么数组的元素打印不正确?
【发布时间】:2013-06-09 11:52:36
【问题描述】:

我刚从C开始。我写了一些非常基本的代码来练习,它应该将键盘输入读入一个数组,输出最长行的长度然后打印它。 有一个读取输入的函数,我希望它打印出每个字符,因为它每次都分配给数组,但它不起作用。它打印了一些看起来很奇怪的字符。 我确实在寻找“数组打印垃圾”。但没有找到答案。

    int getline(char line[])
    /*
    This function   1) Reads a line of input until a '\n',
                    2) Returns the length of the line and
                    3) Saves the line in the array "line[]"
    */
    {
        int c,i;
        i=0; // The character count
        printf("Enter characters:\n");

        while((c=getchar())!='\n') // Reads input until it hits a '\n'
        {
            line[i]=c;
            i++;
            printf("char %d = %c \n ",i,line[i]);// 

为什么这个“printf”不能正常工作?它在第二个占位符处打印一个奇怪的字符

        }
        printf("you typed %d characters.\n",i); //Outputs the number of characters typed

        return i;
    }

【问题讨论】:

  • 在 i++ 之前打印行[i]
  • 如何调用getline(x)? x 的声明是什么?
  • 如果 getchar 返回EOF 怎么办?你也应该处理这个,否则它会被视为一个字符,这是错误的。
  • 啊!万分感谢! @Jens:我正在使用代码块,我没有发现在这里处理 EOF 非常有用,它在我的机器上是 ^Z。键盘何时会发生 EOF?函数调用如下: int long=0;诠释n; while((n=getline(s))!=0) // 'n' 成为输入行的长度,char 数组 's' 将字符存储在数组 { if (n>longest);最长=n; }
  • 当您键入 EOF 字符时,您的程序会崩溃,因为它会一直读取 EOF。使用从 /dev/null 重定向的输入运行您的程序以查看。 s 是如何声明的?作为指向 char 的指针还是作为 char 数组?这也有很大的不同。

标签: c arrays function printing


【解决方案1】:

你正在打印line[i]你增加了i。所以你总是在你刚刚设置的元素之后打印元素,这通常是垃圾。

放线

i++;

while 循环结束时。

【讨论】:

  • 非常感谢 Kninnug!现在工作。耶。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多