Главная » 2015 Сентябрь 14 » Сортировка и файлы в Си
10:31 Сортировка и файлы в Си | |
Недавно столкнулась с очень интересным "багом" в Си, который не могу объяснить. Для двух сортировок создается текстовый файл со случайными целыми числами и затем каждый раз для получения исходного неотсортированного массива происходит считывание из него, чтобы заново упорядочить (отсортировать). Вот код программы:#include "stdio.h"#include "math.h"#include "conio.h"#include "stdlib.h"#include "limits.h"#include "time.h"FILE *f,*g;void Rand(int n,int A[]){int i;srand %d ",A[i]); }}void Vvod(int n,int A[]) { int i; %d",&A[i]);}void Vivod(int A[],int n){ int %d ",A[i]); }fprintf(g,"\n");}void Xoar(int A[],int m,int n){int ); scanf("%d",&n); if (n>10000) {printf("Error");} Rand(n,A); out.txt","w"); Vvod(n,A);//ввод из файла Vivod(A,n);//вывод не отсортированного массива Puzirek(A,n);//алгоритм сортировки "пузырьком" Vivod(A,n);//вывод отсортированного массива Vvod(n,A);//ввод из файла Vivod(A,n);//вывод не отсортированного массива (!) Xoar(A,m,n-1);//алгоритм сортировки Хоара Vivod(A,n);//вывод отсортированного массива return 0;}Красным цветом отметила место в программе, где выдается массив отсортированный, т.е. как будто и не считывали массив с файла. Что делать в этом случае?Путем проб и отладочных мер, проблему так и не решили. Не понятно, почему при считывании из файла, используя функцию fscanf(f, "%d", &A[i]), ничего не происходит и массив остается прежним, отсортированным.Заметили, что при создании файла опустили функцию fclose(f). Добавив ее, программа заработала верно!? Интересно, что же происходит, если мы не закрыли файл? В Паскале, если не закрыть файл, то он просто не запишет последнюю строку. И вроде бы при считывании должны быть нули в массиве - нет данных в файле. Но почему в Си массив не заменяется "нулями", остается неизменным? Как то нелогично. | |
|
Всего комментариев: 0 | |