K
K
Kirill Grinevich2016-01-22 17:35:47
C++ / C#
Kirill Grinevich, 2016-01-22 17:35:47

Spreadsheet editor in C. Wrong conclusion?

I decided to make a more serious C project that would at least be useful. There is an initial level of proficiency in the C language, but for some reason the program does not work correctly. Help me please.
There is a task, here are the conditions https://server.179.ru/tasks/olymp/041.html
Here is my solution

// Табличный редактор.
#include <stdio.h>

#define MAX 100
#define LEN 256

int main()
{ 
  register int t, i, j;
  int size, k, n, max_size_column[255], e;
  char text[MAX][LEN];
  
  // Ввод отредактированной таблицы пока не введется пустая строка.
  for(t=0; t<MAX; t++) {
    gets(text[t]);
    if(!*text[t]) break;
  }
  
  // Находим кол-во столбцов.
  for(j=0; text[0][j]; j++)
    if(text[0][j]=='+') n++;
  n=n-1;
  
  // Заполняем массив наибольших значений минимально возможным числом.
  for(k=0; k<n; k++) 
    max_size_column[k]=0;
    
  k=0;
  
  // Находим максимальное кол-во символов в каждом столбце.
  for(i=0; i<t; i++)
    for(j=0; text[i][j]; j++) {
      if(text[i][0]=='|') {
        if(text[i][j]!='|' && text[i][j]!=' ') size++;
        if(text[i][j]=='|' && j!=0) {
          if(max_size_column[k]<size) max_size_column[k]=size;
          size=0;
          k++;
          if(k==n) k=0;
        }
      }
    }
  
  
  // Тест. Вывод максимального значения в каждом столбце.
  //for(k=0; k<n; k++)
  //	printf("%d\t", max_size_column[k]);
  //printf("\n");
  
  // Вывод отформатированной таблицы.
  for(i=0; i<t; i++) {
    // Вывод строк оформления.
    if(text[i][0]=='+') {
      printf("+-");
      for(e=1; e<=max_size_column[k]; e++) {
        printf("-");
        if(e==max_size_column[k]) {
          e=0;
          k++;
          k==n ? printf("-+\n") : printf("-+-");
        }
      }
      k=0;
    }
    // Вывод строк с символами.
    if(text[i][0]=='|') {
      printf("|1");
      for(e=1, j=1; e<=max_size_column[k]; e++) {
        if(text[i][j]!='|' && text[i][j]!=' ')
          putchar(text[i][j]);
        j++;
        if(text[i][j]=='|' && e<max_size_column[k]) {
          while(e!=max_size_column[k]) {
            printf(" ");
            e++;
          }
        } 
        if(e==max_size_column[k]) {
          e=0;
          k++;
          if(k!=n) printf(" | ");
            if(k==n) {
              printf(" |\n");
              break;
            }
        }
        if(text[i][j]=='|' || text[i][j]==' ') {
          e--;
          j++;
        }
      }
      k=0;
    }
  }
  
  return 0;
}

Can you help? Thanks in advance to everyone who tries to help.

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question