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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2013, 22:18   #1
marina12
Пользователь
 
Регистрация: 13.02.2013
Сообщений: 28
По умолчанию где ошибка?

Здравствуйте! Программа сортирует строки,взятые из файла, и выводит отсортированную запись на экран. Размер файла неизвестен.Память выделять динамически.
Подскажите пожалуйста,почему не работает программа,где ошибки в коде?И на что лучше заменить строчки 42-45, чтобы было "красивее"?
Заранее спасибо!
Код:
#include "stdafx.h"
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
void bubble_sort(char *array[], int size) 
{ 
    char *temp; int i,j; 
    for(i=0;i-size;i++) 
        for(j=0;j-size;j++) 
            if(strcmp(array[ i ],array[j]) < 0) 
                temp=array[ i ],
                array[ i ]=array[j],
                array[j]=temp; 
} 
int main(void) 
{ 
    char *m,**v,t=0,c; 
    int j,k=0,l; 
    FILE* fin; 
    fin=fopen("Input.txt","rb");
    if(fin==NULL) 
        fprintf(stderr,"oshibka otkrutiya faila dlya chteniya\n");
    fseek(fin,0,SEEK_END);
    int fsize=ftell(fin); // кол-во симв. в файле
    fseek(fin,0,SEEK_SET);
    fclose (fin);
    m=(char*)malloc(fsize+1); // под терминирующий ноль 1
    if (!(m=(char*)malloc(fsize+1)))
    {
        fprintf(stderr,"osibka raspredeleniya pamyati!\n");
    }
    fin=fopen("Input.txt", "rb"); 
    if(fin==NULL) 
        fprintf(stderr,"oshibka otkrutiya faila dlya chteniya\n");
    for(j=0;j < fsize;m[j++]=fgetc(fin)); //массив символов
    fclose(fin);
    while (!feof(fin))
        if((c=fgetc(fin)) =='\n' || c==EOF)
                k++; 
    v=(char**)malloc( sizeof(*v) * k); 
    for(v[0]=&m[0],m[fsize-3]=0,l=j=1;l-k;j++) 
        if(m[j]==13) 
            m[j]=0,
            v[l++]=&m[j+2]; 
    
bubble_sort(v, k); 
for(j=0;j<k;j++) 
    printf("%s\n",v[j]); 
 
free(m); 
free(v); 
return 0; 
}
marina12 вне форума Ответить с цитированием
Старый 07.05.2013, 21:24   #2
marina12
Пользователь
 
Регистрация: 13.02.2013
Сообщений: 28
По умолчанию

Исправила код,но теперь программа не сортирует строки,а просто выводит их на экран. В переменную k (количество строк) почему-то заносится число 1, у меня неправильный цикл подсчёта строк?
Код:
#include "stdafx.h"
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
void bubble_sort(char *array[], int size) 
{ 
	char *temp; int i,j; 
	for(i=0;i<size;i++) 
		for(j=0;j<size;j++) 
			if(strcmp(array[i],array[j]) < 0) 
				temp=array[i],
				array[i]=array[j],
				array[j]=temp; 
} 
int main(void) 
{ 
	char *m,**v,t=0,c; 
	int j,k=0,l; 
	FILE* fin; 
	fin=fopen("Input.txt","rb");
	if(fin==NULL) 
		fprintf(stderr,"oshibka otkrutiya faila dlya chteniya\n");
	fseek(fin,0,SEEK_END);
	int fsize=ftell(fin); // кол-во симв. в файле
	fseek(fin,0,SEEK_SET);
	if (!(m=(char*)malloc(fsize+1))) // под терминирующий ноль 1
	{
		fprintf(stderr,"osibka raspredeleniya pamyati!\n");
	}
	for(j=0;j < fsize;m[j++]=fgetc(fin)); //массив символов

	while (!feof(fin))
		{
			if((c=fgetc(fin)) =='\n' || c==EOF)
			{
					k++; 
			}
		}
	v=(char**)malloc(sizeof(*v)*k); 
	for(v[0]=&m[0],m[fsize-3]=0,l=j=1;l-k;j++) 
		if(m[j]==13) 
			m[j]=0,
			v[l++]=&m[j+2]; 
	
bubble_sort(v, k); 
for(j=0;j<k;j++) 
	printf("%s\n",v[j]); 
	
free(m); 
free(v);
fclose(fin);
return 0; 

}
marina12 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
где ошибка? maximusdima Общие вопросы Delphi 4 14.04.2011 16:42
написал программу, где то ошибка, не пойму где... Kelevra91 Общие вопросы C/C++ 5 17.01.2011 16:38
Где ошибка? mia34933 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2010 03:46