代码之家  ›  专栏  ›  技术社区  ›  Uğur Kaya

C-从终端输入输出最长线路

c
  •  -2
  • Uğur Kaya  · 技术社区  · 6 年前

    目前正在练习 C程序设计语言 布莱恩·W·克尼汉·丹尼斯·M·里奇的书,下面的程序应该输出最长的单词。我看不到我的程序有什么问题,如果有人能帮我发现,我会很感激的。

    #include <stdio.h>
    #define MAXLINE 1000
    
    int getLine(char line[], int maxLine);
    void copy(char to[], char from[]);
    
    int main() {
      int len;
      int max;
      char line[MAXLINE];
      char longest[MAXLINE];
    
      max = 0;
      while((len = getLine(line, MAXLINE)) > 0) {
        if(len > max) {
          len = max;
          copy(longest, line);
        }
        if(max > 0)
          printf("Longest line is: %s ", longest);
        return 0;
      }
    }
    
    int getLine(char line[], int maxLine) {
      int c, i;
      // satir icin ongorulen maksimum harf sayisi asilmadikca
      // we birsonraki karakter de EOF veya newline degilse
      for(i = 0; (i < maxLine - 1) && ((c = getchar()) != EOF && c != '\n'); ++i) {
        line[i] = c;
      }
      if(c == '\n') {
        line[i] = c;
        ++i;
      }
      line[i] = '\0';
      return i;
    
    }
    
    void copy(char to[], char from[]) {
      int i;
      i = 0;
      while((to[i] = from[i]) != '\0')
        ++i;
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Mairon    6 年前

    在本部分代码中:

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

    max 0 开始的时候。在if条件中,指定 len 成为 最大值 哪个是 0 .还有一个问题,程序将在第一次迭代后返回0 while 因为你放 return 0 里面。