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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2008, 21:19   #1
kydja
 
Регистрация: 01.03.2008
Сообщений: 2
По умолчанию Считывание интов из файла

Простите за дублеж, но просто может кто еще увидит. Хоть вешайся, курсовой на носу...
Если кто может помочь, научите как эту функцию исправить. В месте, отмеченном звездочкой программа падает. Сейчас там может и другие ошибки, но вообще я все перепробовал, так что очень прошу помощи.



Код:
void Decrypt_with_old_key(int **key, int **invkey){

unsigned char Mas[20];
char kfile[20],file[20],cpfile[20];
cout<<'\n';

//Ввод адреса txt файла с ключом 
cout<<"\tEnter keyfile address=>";
cin>>kfile;


//Файловые переменные для ключа, шифра и разшифра.
FILE *streamK, *streamCi, *streamWrc;

//Открываем поток для чтения ключа
streamK=fopen(kfile,"r");
if (!streamK){cout<<"ERROR opening key file!"<<endl;}

//Записываем его в массив чар(т.к. он невелик, и с типом проблем не будет)
int F2 = fread(Mas,sizeof(char),9,streamK);
if(!F2){cout<<"Error reading the file"<<endl;}


//Заполняем двумерный массив ключа из одномерного 
for (i=0, str=0; str<6, i<3; ++i, str+=3)
{
for (int j=0;j<3;++j)
{
key[i][j]=int(Mas[j+str]);
}
}

//И выводим его. Все в норме
for(i=0;i<3;i++)
{
for(j=0;j<3;j++) 
{
cout<<key[i][j]<<' ';
} 
cout<<endl;
}

// Считаем определитель))
int D1 = (key[0][0]*key[1][1]*key[2][2]) + (key[1][0]*key[2][1]*key[0][2]) + (key[0][1]*key[1][2]*key[2][0]) - (key[0][2]*key[1][1]*key[2][0]) - (key[1][0]*key[0][1]*key[2][2])-(key[2][1]*key[1][2]*key[0][0]); 

cout<<"\tKey's determinant"<<D1<<endl;

//Вызов функции, дающей присоединенный ключ. С ней тоже все ОК
TranspanAndUnion(key,invkey);

//Вывод присоединенного ключа
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
cout<<invkey[i][j]<<' ';
}
cout<<'\n';
}

cout<<'\n';
fclose(streamK);


//Вводим имя txt файла с шифротекстом
cout<<"\tEnter cipherfile address=>";
cin>>cpfile;

//Открываем поток для чтения шифротекста
streamCi=fopen(cpfile,"r");
if (!streamCi){cout<<"ERROR opening open file!"<<endl;}

//Просто считаем колво символов в файле(переменная count)
char ch0;
int count(-1);
while(!feof(streamCi))
{
ch0=fgetc(streamCi);
count++;
}

cout<<"\tAmount of symbols= "<<count<<endl;



//Создаем интовский массив для шифротекста 
int *ma=new int[count];
for(i=0;i<count;++i)
{
ma[i]=0;
}

rewind(streamCi);
//Считываем в этот массив из файла ТУТ ВЫЛЕТАЕТ ПРОГРАММА*
i=0;
while(!feof(streamCi))
{
fscanf(streamCi,"%d",ma[i]);
i++;
}

for(i=0;i<count;++i)
cout<<ma[i];

//Создание двумерного массива ключа
int **maz=new int *[3];
for(i=0;i<3;++i)
{
maz[i]=new int [count/3];
}

//Заполнение двумерного массива из трехмерного
for (i=0, str=0; str<((2*count)/3), i<3; ++i, str+=count/3)
{
for (int j=0;j<count/3;++j)
{
maz[i][j]=int(ma[j+str]);
cout<<maz[i][j]<<' ';
}
cout<<endl;
}

fclose(streamCi);





//Создаем массив для расшифрованного текста (кодов слов) и обнуляем его
int **decipher = new int *[3];
for(i=0;i<3;++i)
{
decipher[i]=new int [count/3];
}

for(i=0;i<3;++i)
for(j=0;j<count/3;++j)
{
decipher[i][j]=0;
}




//Указываем имя файла, в который нужно записать расшифрованный текст
cout<<"\tEnter clearfile address=>";
cin>>file;
cout<<endl;

//Ф-ция умножения матриц (тут разшифровка). С ней все нормально.
MatrMyltiplay(decipher,invkey,maz,count,D1);

// Открытие и Запись расшифрованного теста в файл
streamWrc=fopen(file,"w+");
if(!streamWrc){cout<<"ERRORRR!!!"<<endl;}


for(i=0;i<3;++i)
for(j=0;j<count/3;++j)
{
fprintf(streamWrc,"%c",decipher[i][j]);
}

//Вывод на экран
for(i=0;i<3;++i)
{
for(j=0;j<count/3;++j)
cout<<decipher[i][j]<<' ';
}


fclose(streamWrc); 
}




* Считывать шифротекст ПРОБЫВАЛОСЬ ТАК
- fscanf(streamCi,"%d",(char*)ma[i]); // сам массив инт
- fscanf(streamCi,"%d",ma[i]); //сам массив чар

Кроме того, писал &mas и “%i”

moderator: Используйте тег <CODE>

Последний раз редактировалось merax; 17.05.2008 в 12:27.
kydja вне форума Ответить с цитированием
Старый 17.05.2008, 18:16   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Код:
//Создаем интовский массив для шифротекста   
int *ma=new int[count];  
for(i=0;i<count;++i)  
{ 
ma[i]=0; 
}  
   
rewind(streamCi);  
//Считываем в этот массив из файла ТУТ ВЫЛЕТАЕТ ПРОГРАММА*  
i=0;  
while(!feof(streamCi))  
{ 
fscanf(streamCi,"%d",ma[i]); 
i++; 
}
В scanf надо передавать АДРЕС переменной, а не её значение, тем более 0 в данном случае. И вообще, в данном случае лучше пользовать fread. И пользуйтесь тэгом CODE, если хотите, чтобы кто-то всё это прочитал и Вам помог, сколько можно оставлять это модераторам.
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание с файла (assembler) Prizrak58 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.01.2008 18:40
Считывание данных из файла inret Общие вопросы Delphi 4 18.11.2007 18:03
Считывание из файла DimkinStd Общие вопросы Delphi 7 24.01.2007 19:18
Считывание строки из файла до символа Stormzcooler Общие вопросы Delphi 7 18.12.2006 15:01
Считывание данных из файла PAVEL315 Общие вопросы Delphi 26 17.12.2006 00:53