C - Вывести самую длинную строку с терминального входа - PullRequest
0 голосов
/ 17 декабря 2018

В настоящее время практикуется Книга языка программирования C из книги Бриана В. Кернингана Дениса М. Ритчи, и следующая программа должна вывести самое длинное слово.Я не вижу, что не так в моей программе, был бы признателен, если бы мне помогли обнаружить.

#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 Ответ

0 голосов
/ 17 декабря 2018

в этой части вашего кода:

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

max - это 0 в начале.в условии if вы назначаете len равным max, равному 0.Есть и другая проблема: программа вернет 0 после первой итерации вашего while, потому что вы положили return 0 внутри него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...