LINUX.ORG.RU

Помогите поправить код си

 


0

1
#define MAXI 120000
/////////////////////////
int  line=0;
int  max_line=0;
char sh;
char len[MAXI];
char max_len[MAXI];
/////////////////////////

void copyline(char line_in[],char line_out[],int size_line)

{

  int counter=0;
  while(counter<12000-1)
    {
      max_len[counter]=len[counter];
      counter++;
    };
  max_len[counter++]='\0';
  line=0;
};



char get_line()
{

  while((sh=getchar())!=EOF)
    {
      if(sh!='\n')
        {
          len[line]=sh;
          line++;
        };
      if(sh=='\n' && line>max_line)
        {
          max_line=line;
          copyline(max_len,len,line);
        };
      if(sh=='q') break;

    };

};

///////////////////////
int main()

{

  get_line();

  printf("%d\n%s\n",max_line,max_len);




  return 0;
};

Вывод самой длинной строки. Почему если вводить

0
00
000
0000
00000
000000
q
выводит :
6
000000
всё правильно, а если что-то типа этого

rugerkr
iwrghvuifhviuwrh
irvhuiwrh
werilvuhfui
q
выводит:
20
irvhuiwrhwerilvuhfui

то есть строки сливаются и число символов не верно.

★★★★★

Последнее исправление: Dron (всего исправлений: 1)
Ответ на: комментарий от vahtu

Кстати размер буфера у тебя 120000, а ограничиваешь ты его 12000 :). Сам же завел константу - так и сравнивай с ней.

vahtu
()
Ответ на: комментарий от vahtu
#define MAXI 120000
/////////////////////////
int  line=0;
int  max_line=0;
char sh;
char len[MAXI];
char max_len[MAXI];
/////////////////////////
//Функция копирования строк
void copyline(char line_in[],char line_out[],int size_line)

{

  int counter=0;
  while(counter<MAXI-1)
    {
      max_len[counter]=len[counter];
      counter++;
    };
  max_len[counter++]='\0';
  
};

//Функция чтения и сравнения строк

char get_line()
{

  while((sh=getchar())!=EOF)
    {
      if(sh!='\n')
        {
          len[line]=sh;
          line++;
        };
      if(sh=='\n' && line>max_line)
        {
          max_line=line;
          copyline(max_len,len,line);
          line=0;
        };
      if(sh=='q') break;

    };

};

///////////////////////
int main()

{
  get_line();

  printf("%d\n%s\n",max_line,max_len);

  return 0;
};



Один фиг , должно всё правильно отработать, но та же хрень.
Dron ★★★★★
() автор топика
Ответ на: комментарий от vahtu

Разбей условие

Спасибо тебе vahtu.

Dron ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.