Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 17:30   #1
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию как сделать,чтоб таблица в файл выводила выравненной?

Я написал программу,которая считывает в файле таблицу,расположения команд (название, кол-во игр, П, Н, П, МЗ, МП, разница мячей, кол-во О),затем из другого файла читаю результаты новых матчей,которые нужно добавить в таблицу. добавлю из матчей новые данные и получаю обновленную таблицу. а вот как мне эту таблицу вывести в файл чтоб она не была скопом данных,а была понятна и приятна для чтения?

текст программы:
Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 20 // длина имени команды
#define M 16 // кол-во команд в чемпионате

struct komanda{
				char name_club[N]; 
				int kolvo_game; int pobedy; int nichya; int porazhenie; 
				int MZab; int Mprop; int raznM; 
				int Ochki;
			  };
struct table_RFPL{komanda data[M]; int KOLVO;};

void add_result(char *home, int Mhome, int Ohome, char *gosti, int Mgosti, int Ogosti, table_RFPL **T)
{
	int i=0;
	while(strcmp(home, (*T)->data[i].name_club)!=0)
	{
		i++;
	}
	(*T)->data[i].kolvo_game++;
	(*T)->data[i].Mprop += Mgosti;
	(*T)->data[i].MZab += Mhome;
	(*T)->data[i].Ochki += Ohome;
	if(Ohome==3)(*T)->data[i].pobedy++;
	else
		{
			if(Ohome==1)(*T)->data[i].nichya++;
			else (*T)->data[i].porazhenie++;
		}
	(*T)->data[i].raznM = (*T)->data[i].MZab - (*T)->data[i].Mprop;

	i=0;
	while(strcmp(gosti, (*T)->data[i].name_club)!=0)
	{
		i++;
	}
	(*T)->data[i].kolvo_game++;
	(*T)->data[i].Mprop += Mhome;
	(*T)->data[i].MZab += Mgosti;
	(*T)->data[i].Ochki += Ogosti;
	if(Ogosti==3)(*T)->data[i].pobedy++;
	else
		{
			if(Ogosti==1)(*T)->data[i].nichya++;
			else (*T)->data[i].porazhenie++;
		}
	(*T)->data[i].raznM = (*T)->data[i].MZab - (*T)->data[i].Mprop;
}
void getting_new_rezults(table_RFPL *T, FILE *rez)
{
	int Mhome, Mgosti, Ohome, Ogosti, h, g;
	char home[N], gosti[N]; 

	while(!feof(rez))
	{
		fscanf(rez, "%s", &home);
		fscanf(rez, "%s", &gosti);
		fscanf(rez, "%d", &Mhome);
		fscanf(rez, "%d", &Mgosti);

			if(Mhome == Mgosti)
			{
				Ohome = Ogosti = 1;
			}
			else
				{
					if(Mhome < Mgosti)
					{
						Ohome = 0;
						Ogosti = 3;
					}
					else 
						{
							Ohome = 3;
							Ogosti = 0;
						}
				}
		add_result(home, Mhome, Ohome, gosti, Mgosti, Ogosti, &T);
	}
	
}

void sortirovka(table_RFPL *T)
{
	int i,j,C;
    komanda x;

	for(i=1; i<T->KOLVO; i++)
   {
		x = T->data[i];
		C = T->data[i].Ochki;

		j=i-1;
		while( (j>=0)&&(T->data[j].Ochki < C) )
		{
			T->data[j+1]=T->data[j];
			j--;
		}
		T->data[j+1] = x;
   }
}
void vyvod(table_RFPL *T, FILE *out)
{
	  for(int i=0;i<T->KOLVO; i++)
  {
	  fprintf(out, "%d %s",i+1,T->data[i].name_club);
	  fprintf(out, " %d", T->data[i].kolvo_game);
	  fprintf(out, " %d", T->data[i].pobedy);
	  fprintf(out, " %d", T->data[i].nichya);
	  fprintf(out, " %d", T->data[i].porazhenie);
	  fprintf(out, " %d", T->data[i].MZab);
	  fprintf(out, " %d", T->data[i].Mprop);
	  fprintf(out, " %d", T->data[i].raznM);

	  if(i+1 < T->KOLVO)fprintf(out, " %d\n", T->data[i].Ochki);
	  else fprintf(out, " %d", T->data[i].Ochki);
  }
}

void main()
{
	table_RFPL T;
	komanda ttt;

	FILE *in,*rez,*out;
	in = fopen("d:\\TableRFPL.txt", "r");
	rez = fopen("d:\\Games.txt", "r");

  T.KOLVO=0;
  while(!feof(in))
  {
	fscanf(in, "%s", &ttt.name_club);
	fscanf(in, "%s", &ttt.name_club);
	fscanf(in, "%d", &ttt.kolvo_game);
	fscanf(in, "%d", &ttt.pobedy);
	fscanf(in, "%d", &ttt.nichya);
	fscanf(in, "%d", &ttt.porazhenie);
	fscanf(in, "%d", &ttt.MZab);
	fscanf(in, "%d", &ttt.Mprop);
	fscanf(in, "%d", &ttt.raznM);
	fscanf(in, "%d", &ttt.Ochki);

	T.data[T.KOLVO]=ttt;
	T.KOLVO++;
  }

	getting_new_rezults(&T, rez);
	sortirovka(&T);

	out = fopen("d:\\TableRFPL.txt", "w");
	vyvod(&T, out);
	fclose(in);
	fclose(rez);
	fclose(out);

	printf("\n Proccesing 100%%!");
	getch();

}
Petruha-nsk вне форума Ответить с цитированием
Старый 06.06.2009, 17:38   #2
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

а если выходной файл сделать в виде html-документа
Goblin вне форума Ответить с цитированием
Старый 06.06.2009, 17:47   #3
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

не желательно. т.к. выводимый файл становится входными данными при следующем запуске. мне нужно чтобы в блокнотовском файле элементы были правильно расположены по столбцам и строкам.
Petruha-nsk вне форума Ответить с цитированием
Старый 06.06.2009, 18:02   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Можно выводить в файл вот так:
Код:
 fprintf(out, " %7d", T->data[i].kolvo_game);
- отводит 7 позиций для числа (остальное забьет пробелами).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.06.2009, 18:11   #5
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

помогите пожалуйста мне лучше с T->data[i].name_club.
тут текст разной длины и его не удается зыписать в выравненный столбец((
что-то подобное я уже использовал,но у меня не получилось...
Petruha-nsk вне форума Ответить с цитированием
Старый 06.06.2009, 18:17   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В принципе, можно считать длину name_club, а потом, после записи в файл, еще добавлять туда N-strlen(T->data[i].name_club) пробелов.

Покажите примеры исходных файлов (TableRFPL.txt и Games.txt).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.06.2009, 18:25   #7
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

TableRFPL.txt (этот файл можно задать в таком неупорядоченном виде,т.к. компьютер и без упорядычевания считает данные):
Код:
1. ЦСКА 8 6 2 0 3 2 1 20
2. Зенит 8 6 1 1 1 2 -1 19
3. Локомотив 7 4 3 0 5 3 2 15
4. Спартак 7 4 2 1 2 4 -2 14
5. Москва 9 2 4 3 5 5 0 10
6. Сибирь 8 1 4 3 6 6 0 7
7. Рубин 8 1 3 4 9 7 2 6
8. Ростов 7 0 2 5 8 10 -2 2
9. Кубань 8 0 2 6 11 11 0 2
10. Терек 9 0 1 8 12 12 0 1
Games.txt(команда-хозяйка, команда-соперница, мячи команды-хозяйки, мячи команды-соперницы):
Код:
Зенит ЦСКА 1 2
Спартак Локомотив 0 2
Москва Сибирь 1 1
Рубин Ростов 3 1
Кубань Терек 3 3
TableRFPL.txt (после выполнения программы): //примерно-желаемый вид
Код:
1                    ЦСКА    10     8     2     0     7     4     3  26
 2            Локомотив     9      6     3     0     9     3     6  21
 3                   Зенит    10     6     1     3     3     6    -3  19
 4                Спартак     9     4     2     3     2     8    -6  14
 5                 Москва    11     2     6     3     7     7     0  12
 6                   Рубин    10     3     3     4    15    9     6  12
 7                  Сибирь    10    1     6     3     8     8     0   9
 8                  Кубань    10    0     4     6    17    17     0  4
 9                   Терек    11    0     3     8    18    18     0  3
10                 Ростов     9     0     2     7    10    16    -6  2
Petruha-nsk вне форума Ответить с цитированием
Старый 06.06.2009, 19:52   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну вот что-нибудь такое подойдет?
Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 20 // длина имени команды
#define M 16 // кол-во команд в чемпионате

struct komanda{
				char name_club[N]; 
				int kolvo_game; int pobedy; int nichya; int porazhenie; 
				int MZab; int Mprop; int raznM; 
				int Ochki;
			  };
struct table_RFPL{komanda data[M]; int KOLVO;};

void add_result(char *home, int Mhome, int Ohome, char *gosti, int Mgosti, int Ogosti, table_RFPL **T)
{
	int i=0;
	while(strcmp(home, (*T)->data[i].name_club)!=0)
	{
		i++;
	}
	(*T)->data[i].kolvo_game++;
	(*T)->data[i].Mprop += Mgosti;
	(*T)->data[i].MZab += Mhome;
	(*T)->data[i].Ochki += Ohome;
	if(Ohome==3)(*T)->data[i].pobedy++;
	else
		{
			if(Ohome==1)(*T)->data[i].nichya++;
			else (*T)->data[i].porazhenie++;
		}
	(*T)->data[i].raznM = (*T)->data[i].MZab - (*T)->data[i].Mprop;

	i=0;
	while(strcmp(gosti, (*T)->data[i].name_club)!=0)
	{
		i++;
	}
	(*T)->data[i].kolvo_game++;
	(*T)->data[i].Mprop += Mhome;
	(*T)->data[i].MZab += Mgosti;
	(*T)->data[i].Ochki += Ogosti;
	if(Ogosti==3)(*T)->data[i].pobedy++;
	else
		{
			if(Ogosti==1)(*T)->data[i].nichya++;
			else (*T)->data[i].porazhenie++;
		}
	(*T)->data[i].raznM = (*T)->data[i].MZab - (*T)->data[i].Mprop;
}
void getting_new_rezults(table_RFPL *T, FILE *rez)
{
	int Mhome, Mgosti, Ohome, Ogosti, h, g;
	char home[N], gosti[N]; 

	while(!feof(rez))
	{
		fscanf(rez, "%s", &home);
		fscanf(rez, "%s", &gosti);
		fscanf(rez, "%d", &Mhome);
		fscanf(rez, "%d", &Mgosti);

			if(Mhome == Mgosti)
			{
				Ohome = Ogosti = 1;
			}
			else
				{
					if(Mhome < Mgosti)
					{
						Ohome = 0;
						Ogosti = 3;
					}
					else 
						{
							Ohome = 3;
							Ogosti = 0;
						}
				}
		add_result(home, Mhome, Ohome, gosti, Mgosti, Ogosti, &T);
	}
	
}

void sortirovka(table_RFPL *T)
{
	int i,j,C;
    komanda x;

	for(i=1; i<T->KOLVO; i++)
   {
		x = T->data[i];
		C = T->data[i].Ochki;

		j=i-1;
		while( (j>=0)&&(T->data[j].Ochki < C) )
		{
			T->data[j+1]=T->data[j];
			j--;
		}
		T->data[j+1] = x;
   }
}


void vyvod(table_RFPL *T, FILE *out)
{
	  for(int i=0;i<T->KOLVO; i++)
  {
   fprintf(out, "%4d ",i+1);
	  
	  for(int k=0; k<N-strlen(T->data[i].name_club); k++)
	   fprintf(out," ");
	  fprintf(out, "%s",T->data[i].name_club);  
	   
	  fprintf(out, " %6d", T->data[i].kolvo_game);
	  fprintf(out, " %6d", T->data[i].pobedy);
	  fprintf(out, " %6d", T->data[i].nichya);
	  fprintf(out, " %6d", T->data[i].porazhenie);
	  fprintf(out, " %6d", T->data[i].MZab);
	  fprintf(out, " %6d", T->data[i].Mprop);
	  fprintf(out, " %6d", T->data[i].raznM);

	  if(i+1 < T->KOLVO)fprintf(out, " %d\n", T->data[i].Ochki);
	  else fprintf(out, " %d", T->data[i].Ochki);
  }
}

int main()
{
	table_RFPL T;
	komanda ttt;

	FILE *in,*rez,*out;
	in = fopen("TableRFPL.txt", "r");
	rez = fopen("Games.txt", "r");

  T.KOLVO=0;
  int tmp;
  while(!feof(in))
  {
	fscanf(in, "%d", &tmp);
	fscanf(in, "%s", &ttt.name_club);
	fscanf(in, "%d", &ttt.kolvo_game);
	fscanf(in, "%d", &ttt.pobedy);
	fscanf(in, "%d", &ttt.nichya);
	fscanf(in, "%d", &ttt.porazhenie);
	fscanf(in, "%d", &ttt.MZab);
	fscanf(in, "%d", &ttt.Mprop);
	fscanf(in, "%d", &ttt.raznM);
	fscanf(in, "%d", &ttt.Ochki);

	T.data[T.KOLVO]=ttt;
	T.KOLVO++;
  }

	getting_new_rezults(&T, rez);
	sortirovka(&T);

	out = fopen("TableRFPL-2.txt", "w");
	vyvod(&T, out);
	fclose(in);
	fclose(rez);
	fclose(out);

	printf("\n Proccesing 100%%!");
	getch();

}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.06.2009, 20:21   #9
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

Спасибо огромное!
но я разобрался в чем у меня была проблема: всё дело в шрифте в блокноте. у меня немного другой Блокнот и поэтому там другие пропорции букв,поэтому как ни старайся таблицу будет отображаться так,а вот если в программе вывести ее на экран,то всё замечательно получается))
Petruha-nsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтоб listbox показывал нумерацию? blackstersl Общие вопросы Delphi 7 01.02.2009 14:28
Как сделать, чтоб в ячейке ВЫБИРАЛОСЬ? kristinafadeewa Microsoft Office Excel 12 27.10.2008 06:05
как сделать чтоб экселев. файл висел открытым на рабочем столе как афиша на заборе? Мара Помощь студентам 6 24.07.2008 13:29
Как сделать чтоб картинки менялись? Kaktys v tymane Помощь студентам 1 09.05.2008 00:53
Как сделать программу чтоб отсылала файл по FTP. Kenifer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 15.08.2007 20:58