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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 12:05   #1
Vigoss
Новичок
Джуниор
 
Регистрация: 23.12.2010
Сообщений: 1
По умолчанию Работа с файлами в C++

Помогите пожалуйста разобраться, что я делаю не так с считыванием из файла? В C++ совсем новичок, сильно не ругайте; в общем программа должна считывать строки из файла, позволять добавлять новые строки; просматривать содержимое файла; рассматривать файл как последовательность битов и сортировать строки по возрастанию в алфавитном порядке, если сумма битов, содержащих единицы четна, если нечетна, то по убыванию. Проблема в считывании из файла (строке e[i][l]=fgetc(f1); )
Как лучше считать строчки из файла в двумерный массив ?
Код:
#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
#include <iostream.h>
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused

char * bubble(char mass[25][25],int SIZE2)           //пузырьковая сортировка
	 {  int i,j,cc,SIZE;
	 SIZE=25;
	 for (cc = 1; cc <=SIZE2; cc++) {
	 for (int i = 0; i<SIZE-1; ++i){
		int tmp = 0;
		for (int j=(i+1); j<SIZE; ++j)
			if (mass[i][cc]<mass[j][cc]) {
				tmp = mass[i][cc];
				mass[i][cc] = mass[j][cc];
				mass[j][cc] = tmp;
				}
			}
	}}

 char * bubble2(char mass[25][25],int SIZE2)           //пузырьковая сортировка
	 {  int i,j,SIZE,cc;
	 SIZE=25;
	 for (cc=1; cc <=SIZE2; cc++) {
	 for (int i = 0; i<SIZE-1; ++i){
		int tmp = 0;
		for (int j=(i+1); j<SIZE; ++j)
			if (mass[i][cc]>mass[j][cc]) {
				tmp = mass[i][cc];
				mass[i][cc] = mass[j][cc];
				mass[j][cc] = tmp;
				}
			}
	}}

int _tmain(int argc, _TCHAR* argv[])
{  FILE *f1, *f2, *f3;
char c[25][25],e[25][25];
char string[25],btw[25],trl[25];
int b[100];
int i,j,k,p,z,s,m,faaa,sum,l,ps,mda,kes,lol,dk,kk,mk,lk,vk;
i=1;
l=1;
f1 = fopen("f1.txt","a+");
f2 = fopen( "f2.txt", "w" );
 while(e[i][l] != EOF)  //пока файл не закончился
		{while(e[i][l] != '\n') //пока не достигнут конец строки
								{
								e[i][l]=fgetc(f1); //считываем посимвольно
								 i=i+1;
								}
							 l=l+1;
							 i=1;
						}
fclose(f1);
k=0;
p=1;
s=1;
ps=1;
printf("enter 1 if you want to add string, enter 2 if you want to see f1.txt input, enter 3 if you want see it like bytes");
scanf("%d",k);
if (k==1) {
printf("vvedite kolichestvo strok kotorie vi hotite dobavit");  //вводим количество строк что хотим добавить
scanf("%d",j);
while (p<=j) {             //пока p<=количества строк
ps=1;
printf("vvodite stroki\s");        //вводим строки с клавиатуры
gets(string);                  //и считываем их в строку
lol=strlen(string);
while (ps<=strlen(string)) {
 c[ps][p]=string[ps];
 ps=ps+1;
 fputs(string,f1);
}
p=p+1;
}
mda=1;
while (s<=p) {                      //пока s меньше количества добавленных строк в массив
while (mda<=15) {
e[i][l+1]=c[mda][s];//добавить строки из этого массива в массив со строками из файла
i=i+1;
mda=mda+1;
}
s=s+1;
l=l+1;
mda=1;
}
}
if (k==2) {
z=1;
kes=1;
while (z<=(l+1)) {              //пока z<=количеству строк в основном массиве e[i]
while (kes<=25) {
printf("%c",e[kes][z]);          //выведем на экран все элементы этого массива (строки из файла)
kes=kes+1;
}
z=z+1;
kes=1;
}
}
if (k==3) {
f3 = fopen("f1.txt", "b");     //открываем файл как бинарный?
m=1;
 for( ; b[m] != EOF; ) //пока файл не закончился
		{while(b[m] != '\n') //пока не достигнут конец строки
								{
								b[m] = fgetc(f1); //считываем посимвольно
								m=m+1;
								}
						}
faaa=1;
sum=0;
while (faaa<=m)          //пока faaa<=количеству строк в файле
	{if (b[faaa]==1) {    //если элемент равен 1
	 sum=sum+1;           //добавить к сумме +1
    }
	 faaa=faaa+1;
	}
if (sum % 2) {        //если сумма делится на 2 без остатка
bubble(e,l+1);          //сортируем по возрастанию
}
else bubble2(e,l+1);    //если нет - по убыванию
fclose(f3);
dk=1;
kk=1;
while (dk<=(l+1)) {
while (kk<=25) {
btw[kk]=e[kk][l+1];
kk=kk+1;
}
fputs(btw,f2);     //помещаем отсортированный массив в файл f2???????
dk=dk+1;
kk=1;
}
	}
	fclose(f2);
	getch();
}
Vigoss вне форума Ответить с цитированием
Старый 23.12.2010, 13:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как лучше считать строчки из файла в двумерный массив ?
А через fscanf или через ifstream::getline() не хочешь попробовать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами 4thWing Общие вопросы C/C++ 5 12.04.2010 01:04
Работа с файлами С++ Игорь777 Помощь студентам 2 27.04.2009 23:25
Работа с файлами RatMir Помощь студентам 3 09.06.2008 23:05
работа с файлами Antonio86 Общие вопросы Delphi 0 20.01.2008 16:27