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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2009, 18:27   #1
Whiplash
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 24
По умолчанию [C] Работа с массивами строк

Вот фрагмент программы для работы с массивами строк.
Задача достаточно тривиальна - считать строки из файла, отсортировать и произвести вывод на экран. Но вот как раз с этим считыванием и встал..
Данные в str_arr почему-то записываются некоретно..
Буду очень благодарен за помощь.
Код:
#include <iostream>
int index( FILE *stream, char *str_arr[] )
{
	int i;
	char *buf = (char *) malloc( sizeof(char) );

	for ( i = 0; !feof( stream ); i++ )
	{
		fscanf( stream, "%s", buf );				
		str_arr[i] = buf;
	}	
	return --i;
}

void write_str( char *str_arr[], int count )
{
	//for ( int i = 0; i < count; i++ )
	for ( ; count; count--)
		printf("%s \n", *str_arr++);
}

void main()
{
           FILE *stream;
	char *str_arr[MAXSIZE];
	int count;

           if ( !fopen_s( &stream, "Ausgang.txt", "r" ) )
	      count = index( stream, str_arr );
           
           write_str( str_arr, count );
           
           system("PAUSE");
}
Это было бы смешно, если бы не было так серьезно. "451 по Фаренгейту".
Whiplash вне форума Ответить с цитированием
Старый 19.03.2009, 20:54   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Код:
#include <iostream>
#include <stdio.h>

int index( FILE *f, char **str_arr)
{
	int count = 0;
	char buf[1000];
	while(!feof( f ))
	{
		buf[0] = 0;
		fgets(buf,1000, f);	
		if(strlen(buf)!=0)
		{
			str_arr[count] = new char[1000];
			strcpy(str_arr[count], buf);		
			count++;
		}
	}	

	return count;
}

void write_str( char **str_arr, int count )
{
	for ( int i = 0; i < count; i++ )
		printf("%s", str_arr[i]);
}
const int MAXSIZE = 1000;

void main()
{
    FILE *f;
	char **str_arr = new char*[MAXSIZE];
	int count(0);

    if (f = fopen("Ausgang.txt", "r" ) )
	{	
		count = index(f, str_arr);
		fclose(f);
	}
     //сортировка
     write_str( str_arr, count );

    for(int i=0; i<count; i++)
		delete [] str_arr[i];		
	delete [] str_arr;

	system("PAUSE");	
}
Svetlag вне форума Ответить с цитированием
Старый 19.03.2009, 21:04   #3
Whiplash
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 24
По умолчанию

Огромное спасибо)) Теперь я понял, как я был глуп - мне почему-то казалось, что всю грязную работу за меня выполнит компилятор..
Это было бы смешно, если бы не было так серьезно. "451 по Фаренгейту".
Whiplash вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами (С++) q3storm Помощь студентам 7 26.04.2011 09:46
Работа с массивами MasterofCDM Общие вопросы Delphi 4 27.11.2008 23:45
работа с массивами mager JavaScript, Ajax 5 27.08.2008 22:02
Работа с массивами в C# MaskEdit Общие вопросы .NET 3 17.05.2008 17:59
Работа с массивами rexec Microsoft Office Excel 12 21.04.2008 13:29