我正在尝试运行最大行长度程序,如“C编程语言”第一章所示,输出总是一系列问号框,如⍰。
以下是代码:
#include <stdio.h>
#define MAXLINE 1000 /* maximum input line size */
int getline(char line[], int maxline);
void copy(char to[], char from[]);
/* print longest input line */
int main()
{
int len; /* current line length */
int max; /* maximum length seen so far */
char line[MAXLINE]; /* current input line */
char longest[MAXLINE]; /* longest line saved here */
max =0;
while((len = getline(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copy(longest, line);
}
if (max > 0) /* there was a line */
printf("%s", longest);
return 0;
}
/* getline: read a line into s, return length */
int getline(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar() != EOF) && c != '\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
/* copy: copy 'from' into 'to'; assume to is big enough */
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
这是技术问题还是代码明显错误? 谢谢,你呢?
答案 0 :(得分:2)
你有一个小小的错字。 getline函数中的这一行:
for (i = 0; i < lim - 1 && (c = getchar() != EOF) && c != '\n'; ++i)
应该是
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
这个错误的结果是你调用getchar()
,测试返回的值以查看它是否等于EOF
,并指定1/0(真/假) )变量c
的值。但您要做的是将返回的值从getchar()
分配给c
,然后测试它是否等于EOF
。
因此,如果您输入&#34; test&#34;,您的拼写错误的getline函数不会将字符t e s t
写入line
;相反,它写了四个1值(即,字符'\001'
,如果您想以这种方式考虑它是一个控件-A),并且由于那不是打印字符,您的显示系统将它打印成一个小盒子。