2015-02-05 6 views
-3

Я пишу программу практики, чтобы читать целые числа из файла и сортировать их. Я немного запутался о файле IO в С. То, что я до сих пор ниже, я надеялся, что кто-то может взглянуть на него и предложить какие-то корректировки/предложения, если у них есть какие-то ...Попытка прочитать ряд целых чисел из файла

  // TODO: Open input file and do same as above 
      char *mode = "r"; 
      FILE *fp = fopen(inputFile, mode); 

      if(fp == NULL){ 
        fprintf(stderr, "Can't open input file!"); 
        exit(1); 
      } 

      // Load the numbers into a buffer and get a count 
      int buffer[100]; 
      int count = 0; 
      while(fscanf(fp, "%d", &buffer[count]) == 1) { 
        count++; 
      } 


      // Initialize the array with the proper size 
      integers = (int*)malloc(sizeof(count*sizeof(int))); 


      // Load the integers into the array 
      rewind(fp); 
      for(int i = 0; i < count; i++){ 
        if(fscanf(fp, "%d", &integers[count] != 1)){ 
          fprintf(stderr, "Error loading integers into array"); 
          exit(1); 
        } 

      } 
+0

где вы уменьшаете массив целых чисел? – PeerNet

+0

@PeerNet - это глобальный указатель int. Я включил только функцию моей программы – JayB

+0

@JayB Вы знаете, что 'n' делает в' fscanf() 'правильно? Количество символов, прочитанных так, каков ваш ввод, если у вас есть 10 в файле? – Gopi

ответ

1

fscanf() возвращает количество успешно прочитанных элементов, поэтому проверяйте необходимое количество элементов для чтения, и в вашем случае вы можете просто считывать значения в свой массив и индексировать индекс. Позже используйте значение индекса для выделения памяти.

int *temp; 
integers = malloc(sizeof(int))); 
while(fscanf(fp, "%d", &integers[index]) == 1) 
{ 
    index++; 
    temp = realloc(integers,sizeof(int) * (index+1)); 
    if(temp != NULL) 
    integers = temp; 
} 
+0

Если вы заботитесь о производительности, вы должны перераспределить() большие куски, чем один« int »за раз. –

+0

@JohnZwinck Я так рассчитывал, что на самом деле это не проблема. благодаря – JayB

Смежные вопросы