无法在程序中找到打印最长输入行的错误

时间:2015-04-14 16:56:43

标签: c arrays string

#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 1000

int mygetline( char line[], int maxline); /*will return length */
void copy (char to[], char from[]);

int main(){

    int len; // length of the line
    int max;  // maximum length seen so far
    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while((len = mygetline(line, MAXLINE)) >0){
        if (len>max){
            max = len;
            copy(longest, line);
        }

        if (max>0){ 
            printf("%s", longest);
        }
    }
    return 0;
}

/*getline: reads a line into s, and returns length of the line */
int mygetline(char s[], int limit){

    int c, i;
    for(i=0; i<limit-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=0;
    while((to[i] = from[i] != '\0')){
        ++i;
    }
}

上面说明了我打印最长输入行的代码。代码正在编译而没有任何错误,但是当我运行程序时,它不会打印任何内容。我无法在这里找到问题所在。

2 个答案:

答案 0 :(得分:0)

这有点简单,通过使用可用的字符串函数来完成工作,而不是通过char检查char。如果需要,您可以打开文件进行输入并替换stdin

#include <stdio.h>
#include <string.h>

#define MAXLINE 1000

int main(){
    int len;    // length of the line
    int max;    // maximum length seen so far
    char line[MAXLINE];
    char longest[MAXLINE];
    char *sptr;
    max = 0;
    while((sptr = fgets(line, MAXLINE, stdin)) != NULL) {
        if ((sptr = strtok(sptr, "\r\n")) != NULL) {
            len = strlen(sptr);
            if (len > max) {
                max = len;
                strcpy(longest, sptr);
            }
        }
    }
    if (max)
        printf("%d: %s\n", max, longest);
    else 
        printf("No strings read\n");
    return 0;
}

答案 1 :(得分:0)

你来回拨打的大括号不正确。尝试:

while (((to[i] = from[i]) != '\0'))

如果您尝试将值打印到[i]和[i],您会在代码中找到问题。