【发布时间】: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