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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2008, 11:57   #1
Mihalich1988
 
Регистрация: 04.12.2008
Сообщений: 3
По умолчанию Построчное чтение из файла

Есть файл file.txt

В нем есть несколько строк, в итоге, их надо поменять местами...

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

void main( void ) 
{
FILE *file;
char *file_name = "file.txt";
char *k;
char *array[100];
int i;

file = fopen(file_name, "r");

if (file == NULL)
{
printf("Error open file");
fclose(file);
}

else
{
printf("Before:\n\n");

i = 0;



while(!feof(file))
{
fgets(k,100,file);
printf("%s",k);

array[i] = k;
i++;
}

fclose(file);


printf("\n\n\Array test:\n\n");

for (int ii = 0; ii < i; ii++)
{
printf("%i ", ii);
printf("%s\n", array[ii]);
} 



//file = fopen( file_name, "w" );
//for (ii = i-1; ii >= 0; ii--)
//{
//fprintf(file, "%s\n", array[ii]);
//}
//fclose( file );



}

}
Проблема заключается в следующем:
В массив все время записывается последняя строка файла!


Почему так происходит я не понимаю...

printf("%s",k); - выводит все как нужно...

Помогите разобраться, пожалуйста!
Mihalich1988 вне форума Ответить с цитированием
Старый 04.12.2008, 14:35   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Мы также можем ввести строку непосредственно в символьный массив
с клавиатуры, используя cin и ». Например, объявление
char string2[20];
создает символьный массив, способный хранить строку из 19 символов и
завершающий нулевой символ. Оператор
cin >> string2;


Это выдержка из учебника, если я все правильно понимаю, то объявленный вами массив получается массив одной строки, содержащей сто символов.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 04.12.2008, 14:47   #3
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Нет... Это получается указатель на строку из 100 символов!!!
Надо немного не так!
Лушче char** делать и выделять динамически...
Или использовать string[]
StarWorm вне форума Ответить с цитированием
Старый 08.12.2008, 03:43   #4
Mihalich1988
 
Регистрация: 04.12.2008
Сообщений: 3
По умолчанию

Цитата:
Сообщение от StarWorm Посмотреть сообщение
Нет... Это получается указатель на строку из 100 символов!!!
Надо немного не так!
Лушче char** делать и выделять динамически...
Или использовать string[]
Если не сложно, то объясни немного подробнее... ))
Mihalich1988 вне форума Ответить с цитированием
Старый 17.12.2008, 01:42   #5
Mihalich1988
 
Регистрация: 04.12.2008
Сообщений: 3
По умолчанию

Кто-нибудь подскажет, как правильно сделать?
Как занести в массив строку???

Или как использовать string[]?
Mihalich1988 вне форума Ответить с цитированием
Старый 17.12.2008, 02:10   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Код:
char **str = new char*[10];
for(int i=0; i<10; i++)
    str[i] = new char[100];
В итоге получаем структуру типа такой
str[0] = "строка";
str[1] = "строка";
....
str[9] = "строка";
Тоесть тот же массив, только вместо элементов - строки.
string[] тоже самое. Тот же массив строк.

Таким же образом можно сделать и матрицу строк, но это уже извращение.
MaTBeu вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение из файла Илья500 Общие вопросы C/C++ 26 05.12.2008 00:37
Чтение из файла... Bill Gates Общие вопросы Delphi 3 22.03.2008 22:13
чтение файла Arteom Общие вопросы Delphi 6 27.08.2007 18:15
Чтение из файла Need_Help Паскаль, Turbo Pascal, PascalABC.NET 5 19.05.2007 05:37
чтение файла vicvtor Общие вопросы Delphi 4 27.11.2006 12:26