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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 15:42   #1
yap123
Новичок
Джуниор
 
Регистрация: 11.12.2011
Сообщений: 1
По умолчанию Язык Си. Сортировка в файле(ошибка в программе)

Добрый день. Пытался написать программу, которая сортирует заранее созданный на компьютере файл со строками(их количество и размер заранее неизвестен!) в алфавитном порядке. В программе непонятно где и непонятно какая ошибка. Можете помочь ее найти и исправить? Код закончен на моменте, когда я для проверки пытаюсь вывести созданный массив строк на экран(для проверки). Если все правильно то останется просто его отсортировать. Если ошибки не видно, также буду благодарен, если кто-то сможет написать программу(наличие указателей обязательно )
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>


	void main (void)
	{
		char c;
		int count=0;
		int length=0;
		int maxlength=0;
		char *temp;
		char **arr;
		
		FILE *input;
		input=fopen("input.txt","r");
		printf("%d",input);
		//FILE*output;
		//output=fopen("Z:\output.txt","w");
		while (!feof(input))
		{
			fscanf(input,"%c",&c);
			if (c=='\n')
			{
				length=0; count++;
			}
			if (c!='\n')
			{
				printf("%c",c);
				length++;
			}

			if (length>maxlength)
			{
				maxlength=length;   
			}
			//
			
		}
		fclose(input);
		printf("\n%d %d",count,maxlength);

		temp =(char *)malloc(sizeof(int)*maxlength);
		arr = (char **)malloc(sizeof(int *)*count);
		
		input=fopen("input.txt","r");

		while (!feof(input))
		{
			fscanf(input, "%c",&c);
			if (c='\n')
			{
				count++;
			}
		}
	
	int kol=0;
	int j=0;
	int i=0;
	while (!feof(input))
	{	
		fscanf(input, "%c", &c);
		kol++;
		temp[j]=c;
		j++;
		if (c=='\n')	
		{
			arr[i]=(char *)malloc(sizeof(char)*kol);
				for (int k=0;k<kol-1;k++)
					arr[i][k]=temp[k];
				arr[i][kol-1]='\0';

			i++;
			kol=0;
			j=0;
		}
	 }
	
		for (int i=0; i<1; i++)
		{
			printf("%s", (char *)(arr[i]));
			getch();
		}
	
	getch();

}
Может все-таки кто-нибудь подскажет?

Последний раз редактировалось yap123; 11.12.2011 в 19:17. Причина: 123
yap123 вне форума Ответить с цитированием
Старый 15.12.2011, 15:04   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int openFile(char **name, FILE **f, char mod[]) {
	if ((*f=fopen(*name, mod))==NULL) return 0;
	else return 1;
}

void bufferSize(char **str, int size, int cons) {
	*str=realloc(*str, (size+cons)*sizeof(char));
}

void newBufferSize(char **str, int cons) {
	*str=(char*) malloc(cons*sizeof(char));
}

void main() {
	FILE *f;
	char *name="test.dat", mod[2]="r\0", *str=NULL, **arrstr=NULL;
	int i, c, j, pam=0, cns=255;

	newBufferSize(&str, cns);
	if (openFile(&name, &f, mod)==1) {
		i=0;   j=0;
		puts("файл: ");
		while ((c=getc(f))!=EOF) {
			if (c=='\n') { 
				i++;	
				str[i-1] = '\0';	
										
				pam=pam+i;
				
				arrstr=(char**) realloc(arrstr, pam);
				j++;
				arrstr[j-1]=str;	
				
				puts(str);		
				
				str=NULL;
				newBufferSize(&str, cns);
				i=0; 
			} else {
				i++;
				if ((i % cns)==0) {					
					bufferSize(&str, i, cns);
				}
				str[i-1] = c;		
			}
		}
		
		
		for (i=0; i<j-1; i++) {
			pam=i;
			for (c=i+1; c<j; c++) {					
				cns=strcmp(arrstr[pam], arrstr[c]);
				if (cns>0) { 
					pam=c; cns=arrstr[c][0]; 
				}
			}
			
			if (pam!=0) {
				str=arrstr[pam]; 
				arrstr[pam]=arrstr[i];
				arrstr[i]=str;
			}
			
		}
		
		printf("\n сортировка строк в алфавитном порядке: \n");
		for (i=0; i<j; i++) {
			puts(arrstr[i]);
		}
		
		fclose(f);
		
		if (openFile(&name, &f, "w")==1) {
			for (i=0; i<j; i++) {
				fprintf(f, "%s\n", arrstr[i]);
			}
			fclose(f);
		} else puts("не удалось запиать файл\n");
		
		free(arrstr);
		free(str);
	} else puts("не удалось открыть файл\n");
	
}
dr.Chas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инвертировать строки в файле(язык си) icar1992 Помощь студентам 0 29.11.2011 22:12
найти ошибки в программе (язык C) nuvoletta Помощь студентам 3 29.11.2011 21:21
Сортировка в файле Надежда1286 Помощь студентам 3 27.11.2011 16:26
Изменить Язык в программе. Corpinccom Паскаль, Turbo Pascal, PascalABC.NET 8 15.08.2010 23:02
Сортировка в текстовом файле Isthmus Паскаль, Turbo Pascal, PascalABC.NET 18 01.05.2008 20:46