2015-02-27 3 views
-1

ЦЕЛИ:Программа печатает навсегда, когда я запускаю ее. Ошибка с массивом?

Задача 1

Программа должна читать номера из фи ля под названием «prob1 input.dat», который имеет следующий формат:

(number_of_entries) (entry1) (entry2). ..

Это означает, что первая строка файла содержит количество записей, предоставленных файлом. Следующие строки определяют записи, в которых каждая строка содержит одну запись. В нашем случае каждая запись будет положительным целым числом. Программа должна читать все записи и хранить их в массиве. Затем программа должна проверять каждое значение в массиве, если оно является простым числом или нет, и распечатать результат в файл с именем «prob1 output.dat». Этот файл должен иметь столько строк, сколько номеров, предоставленных файлом «prob1 input.dat». В каждой строке выходного файла программа должна печатать номер, а затем «является простым числом» или «не является простым числом».

КСТАТИ, все числа в файле больше, чем 25

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 

int main() 
{ 
    FILE *fptr; 
    char prob1_input[] = "prob1_input.dat"; 
    int terms,i; 
    int x[]={}; 

    fptr = fopen(prob1_input, "r"); 

    if (fptr == NULL) 
     printf("Error in opening file %s",prob1_input); 

    terms = x[0]; 

    for(i=0;i<terms;i++) 
    { 
     fscanf(fptr,"%d",&x[i]); 
     terms = x[0]; 

     for(i=1;x[i]!=2;i++) 
     { 
      if(x[i]%2 == 0 || x[i]%3 == 0 || x[i]%5 == 0 || x[i]%7 == 0) 
      { 
       printf("%d is not a prime number\n",x[i]); 
       break; 
      } 
      else if (x[i] == 2 || x[i] == 3 || x[i] == 5 || x[i] == 7) 
      { 
       printf("%d is a prime number\n",x[i]); 
       break; 
      } 
      else 
      { 
       printf("%d is not a prime number\n",x[i]); 
       break; 
      } 
     } 
    } 


    return 0; 

} 
+3

Скомпилируйте все предупреждения и информацию об отладке ('gcc -Wall -Wextra -g'). Затем узнайте, как использовать отладчик ('gdb'). BTW вы должны проверить результат 'fscanf'. –

+2

Что вы ожидаете от этого 'int x [] = {};' делать? – alk

+1

Я изо всех сил пытаюсь найти слова для 'int x [] = {};' – WhozCraig

ответ

3

Использование шаг за шагом подход для этого (пример кода предполагает полную поддержку C99):

  1. Определите переменную для хранения чисел значений.

    size_t terms = 0; 
    
  2. Чтения из файла число значений войти в переменную, определенных в соответствии с 1.

    fscanf(fptr, "%zu", &terms); 
    
  3. Для проведения остальных значений для чтения определить массив с числом элементов, как читать под 2.

    x[1 + terms]; 
    x[0] = terms; 
    
  4. Read число значений, как читать под 2. в массив, определенной в соответствии с 3.

+2

вы не можете инициализировать VLA. – mch

+0

Ху, да! Исправлено ... - спасибо! @mch – alk

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