程序在我运行时会永久打印。数组错误?

时间:2015-02-27 08:47:10

标签: c arrays loops printf scanf

目标:

问题1

程序应该从名为“prob1 input.dat”的文件中读取数字,该文件具有以下格式:

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

这意味着文件的第一行包含文件提供的条目数。以下行定义了每行包含一个条目的条目。在我们的例子中,每个条目都是一个正整数。程序应该读入所有条目并将它们存储在一个数组中。然后程序应检查数组中的每个值(如果它是素数),并将结果打印到名为“prob1 output.dat”的文件中。该文件应具有与文件“prob1 input.dat”提供的数字一样多的行。在输出文件的每一行中,程序应打印数字,然后“是素数”或“不是素数”。

BTW,文件中的所有数字都大于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;

}

1 个答案:

答案 0 :(得分:3)

为此使用分步方法(示例代码假定完全支持C99):

  1. 定义一个变量来保存要输入的值的数量。

    size_t terms = 0; 
    
  2. 从文件中读取进入您在1下定义的变量的值的数量。

    fscanf(fptr, "%zu", &terms);
    
  3. 要保留要读取的其余值,请定义一个数组,其元素数量在2下读取。

    x[1 + terms];
    x[0] = terms;
    
  4. 将2下读取的值的数量读入3中定义的数组中。