Консультация № 192031
07.12.2017, 13:25
0.00 руб.
0 3 1
Здравствуйте! Прошу помощи в следующем вопросе:Помогите пожалуйста довести прогу до ума,а то она записывает не все элементы массива, а мне нужно программу, которая исходный числовой массив данных (если он есть) считывает из текстового файла f1, а выходную информацию записывает в текстовый файл f2
Вот код:



Приложение:
#include<math.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
#include <cstdlib>
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[]){
int i;
int N=0;
int a[10];
FILE *f1=fopen("m1.txt", "r");
FILE *f2=fopen("m2.txt", "w");
fscanf(f1,"%d",&N);
for(i=0;i<N;i++)

{
fscanf(f1,"%d",&a[i]);
fclose(f1);

}
for(i=0;i<N;i++)

{
fprintf(f2,"%d",a[i]);
fclose(f2);



}

getch();
}

Обсуждение

давно
Студент
400828
51
07.12.2017, 13:31
общий
Адресаты:
Здравствуйте.
Вынесите оба fclose из тела цикла.
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
давно
Старший Модератор
17042
808
12.12.2017, 12:29
общий
Адресаты:
Оформите ответ?
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Студент
400828
51
14.12.2017, 13:46
общий
это ответ
Здравствуйте, PavelKotik!
В Вашем коде:
Код:

#include<math.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
#include <cstdlib>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[]){
int i;
int N=0;
int a[10];
FILE *f1=fopen("m1.txt", "r");
FILE *f2=fopen("m2.txt", "w");
fscanf(f1,"%d",&N);
for(i=0;i<N;i++)
{
fscanf(f1,"%d",&a[i]);
fclose(f1); // Закрытие файла на первом же проходе цикла for

}
for(i=0;i<N;i++)
{
fprintf(f2,"%d",a[i]);
fclose(f2); // Закрытие файла на первом же проходе цикла for
}
getch();
}

файлы f1 и f2 закрываются (fclose) сразу после первой операции ввода (fscanf), или вывода (fprintf), т. к. они находятся в теле цикла for.
Так что ко второму проходу цикла программа теряет возможность чтения и записи соответственно.
Возможные изменения:
Код:

#include<math.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
#include <cstdlib>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[]){
int i;
int N=0;
int a[10];
FILE *f1=fopen("m1.txt", "r");
FILE *f2=fopen("m2.txt", "w");
fscanf(f1,"%d",&N);
for(i=0;i<N;i++)
{
fscanf(f1,"%d",&a[i]);
}
fclose(f1); // Закрытие файла после чтения всех элементов массива
for(i=0;i<N;i++)
{
fprintf(f2,"%d",a[i]);
}
fclose(f2); // Закрытие файла после вывода всех элементов массива
getch();
}
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Форма ответа