Консультация № 192354
10.01.2018, 13:30
0.00 руб.
0 2 1
Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста найти ошибку в коде, в консоле у меня всё правильно выводит, а вот в текстовом файле нет.



Приложение:
#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 a[10]= {4,1,7,8,-3,11,-8,9,-2,5};
int min=a[0];
int min2;
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]);

}
for(i=1; i<10; i++)
{
if(abs(a[i]) < abs(min))
min = a[i];
}
min2 = a[0];
for(i=1; i<10; i++)
{
if((abs(a[i]) > abs(min)) && (abs(a[i]) < abs(min2)))
min2 = a[i];
}

cout<<min2;

{
fprintf(f2,"%d",min2);

}
fclose(f1);
fclose(f2);

getch();
}

Обсуждение

давно
Посетитель
7438
7205
10.01.2018, 16:31
общий
это ответ
Здравствуйте, Александр Лепов!
Я бы сделал так:
[code h=200]#include<math.h>
#include<conio.h>
#include<stdio.h>
//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
int i;
int a[100];
int min;
int min2, N;

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]);

min=a[0];

for(i=1; i<N; i++)
{
if (abs(a[i]) < abs(min))
min = a[i];
}
min2 = a[0];
for(i=1; i<N; i++)
{
if((abs(a[i]) > abs(min)) && (abs(a[i]) < abs(min2)))
min2 = a[i];
}

fprintf(f2,"%d",min2);

fclose(f1);
fclose(f2);

return 0;
}
[/code]
Файл m1.txt
Код:
10 4 1 7 8 -3 11 -8 9 -2 5
Результат в файле m2.txt
Код:
-2

Несколько замечаний:
1) Первым числом в файле идет количество чисел N. Которое потом везде и фигурирует (а не всегда 10)
2) Не проверяется переполнение массива a и наличие всех чисел в файле (я, на всякий случай, увеличил размерность массива до 100)
3) Ожидание нажатия на клавишу убрал. Результат - в файле.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Академик
20764
1861
11.01.2018, 11:19
общий
Ещё настоятельно рекомендуется проверять, что fscanf возвращает ожидаемое значение. Если во входных данных мусор, он ничего не загрузит (и вдобавок недопустимый символ вернёт обратно, так что следующий fscanf на него же опять наткнётся), и значения переменных останутся неопределёнными.
Ещё крайне желательно, чтобы выходной файл, раз уж он символьный, заканчивался символами конца строки. На работоспособность это обычно не влияет, но при просмотре файла возможны проблемы. Возможно, что вы как раз на них и нарвались, потому как исходная программа формально верная.
Форма ответа