最大行长度程序在c中打印不可读的字符

时间:2018-05-27 22:31:14

标签: c max line

我正在尝试运行最大行长度程序,如“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;
}

这是技术问题还是代码明显错误? 谢谢,你呢?

1 个答案:

答案 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),并且由于那不是打印字符,您的显示系统将它打印成一个小盒子。