1

私のプログラムは、数値をリストした Numbers テキスト ファイルを読み取り、それらを配列に格納してから 5 列で表示することを想定しています。私の問題は、配列がまったく表示されないことです。なぜかわからない。

#include <stdio.h>
#include <stdlib.h>
#define ELEMENTS 100

void fillArray(FILE *, double [], double *);
void printArray(double [], double); 
double findMIN(double [], double);
double findMAX(double [], double);

int main()
{
    FILE *doublefp;
    double values[ELEMENTS];
    double elements;
    int status;

    status = fopen_s(&doublefp, "Numbers.txt", "r");
    if (status != 0)
    {
        printf("Unable to open the file Numbers.txt\n");
        system("PAUSE");
        exit(99);
    }

    fillArray(doublefp, values, &elements);
    printArray(values, elements);


    printf("The minimum value is %d\n", findMIN(values, elements));

    printf("The maximum value is %d\n", findMAX(values, elements));

    system ("PAUSE");
    return 0;

}

double findMIN(double nums[], double element)
{
    int i;
    double min = nums[0];

    for (i = 1; i < element; i++)
    if (min > nums[i])
      min = nums[i];

  return (min);
}

double findMAX(double nums[], double element)
{
    int i;
    double max = nums[0];

    for (i = 1; i < element; i++)
    if (max < nums[i])
      max = nums[i];

  return (max);

}

void fillArray (FILE *fp, double nums[], int *count)
{
    double number;

    printf("Enter up to %d integers press the F6 key to end input. \n", ELEMENTS);
    *count = 0;
    while (fscanf_s(fp, "%d", &nums[*count]) != EOF)
    {
        (*count)++;
    }

}

void printArray (double nums[], double elements)
{
    int count;

    printf("Values in array:\n");
    for (count = 0; count < elements; count++)
    {
        printf("%5d ",nums[count]);
        if ((count+1)% 10 == 0)
           printf("\n");
    }
    printf("\n");printf("\n");


}

私の番号は、次のようにリストされたテキスト ファイルに記載されています。

4

2 に答える 2

2

基本的に、double elements;する必要がありますint elements

ここ&elementsに がありdouble *、関数fillArrayint *

fillArray(doublefp, values, &elements);

コンパイラで警告をオンにしましたか?

また、 in はprintArray、であるべきときにelementsとして定義されます。doubleint

findMaxとと同じfindMinです。

そしてprintf("%5d ",nums[count]);あるべきprintf("%lf ",nums[count]);

コンパイラのすべての警告を有効にして修正し、機能しない場合はもう一度質問してください。

于 2013-10-27T02:18:10.600 に答える
1

2 つの問題:

1) "printf()" フォーマット ステートメントでは、"%d" を使用して整数を出力し、"%lf" を使用して double を出力する必要があります。あなたはこれを一貫して行っていません。

2) double ではなく、「counting numbers」に「int」を使用する方がよいでしょう。残念ながら、これも一貫して行っているわけではありません。

提案された変更:

#include <stdio.h>
#include <stdlib.h>
#define ELEMENTS 100

void fillArray(FILE * fp, double values [], int * count);
void printArray(double values[] int count); 
double findMIN(double values[], int count);
double findMAX(double values[], int count);

int main()
{
    FILE *doublefp;
    double values[ELEMENTS];
    int elements;
    int status;

    status = fopen_s(&doublefp, "Numbers.txt", "r");
    if (status != 0)
    {
        printf("Unable to open the file Numbers.txt\n");
        system("PAUSE");
        exit(99);
    }

    fillArray(doublefp, values, &elements);
    printArray(values, elements);


    printf("The minimum value is %f\n", findMIN(values, elements));
    printf("The maximum value is %f\n", findMAX(values, elements));

    system ("PAUSE");
   ...   

double findMIN(double nums[], int count)
   ...

void fillArray (FILE *fp, double nums[], int *count)
{
    printf("Enter up to %d integers press the F6 key to end input. \n", ELEMENTS);
    *count = 0;
    while (fscanf_s(fp, "%f", &nums[*count]) != EOF)
    {
        (*count)++;
    }
    ...
于 2013-10-27T02:23:54.180 に答える