2013-10-27 2 views
1

내 프로그램에서는 숫자를 나열한 번호 텍스트 파일을 읽고 배열에 저장 한 다음 5 열로 표시한다고 가정합니다. 내 문제는 배열을 전혀 표시하지 않을 것입니다. 왜 확실하지 않은 Im. 23.53 56.8 12.1 677.23 122.09 788.18 123.25 65.12 98.18 622.27 366.34 433.45 844.56 244.67 544.78 290.10 :C 프로그래밍 배열 함수

#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"); 


} 

내 번호는 다음과 같이 나열 텍스트 파일에 189.28 522.17 321.33.76

+0

은'%의 d' 변환 정수에서 작동합니다. 대신'double's에'% f'을 사용해보십시오. 파일에 한 줄에 하나의 값이 포함되기를 원할 것입니다. –

+1

작성자의 모든 경고를 켜고 수정 한 후 다시 묻습니다. –

+1

'fillArray()'는 선언 된 것과 같은 방식으로 정의조차되지 않습니다.이 코드는 컴파일하지 말고, 경고없이 컴파일하지 말아야합니다. –

답변

1

두 가지 문제 :

1) "의 printf()"형식의 문은 정수를 인쇄하려면 "% d 개"를 사용해야하고, "%의 LF는"복식를 인쇄합니다. 당신은 이것을 일관되게하지 않습니다.

2) "숫자 계산"에 "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)++; 
    } 
    ... 
+0

1 가지 더. 인스턴트 메신저 그래서 그 이후에 모든 0이 없을 소수점 형식을 시도. 나는 % 8.2f를 시도했지만 이번에는 오류가 발생한다. 편집 : 신경 쓰지 마세요. 나는 그것을 얻었다 c : – user2924218

2

기본적으로, double elements; 요구는 여기에 &elementsint elements

될 수있는 double *는 기능 fillArray는이 int *

fillArray(doublefp, values, &elements); 

당신이 당신의 컴파일러의 경고를 켰습니까 예상된다? 그것이 int되어야 할 때

또한 printArray에서 elementsdouble로 정의된다.

findMaxfindMin과 동일합니다.

그리고 printf("%5d ",nums[count]);, 당신의 컴파일러의 모든 경고에 printf("%lf ",nums[count]);

의 전원을 켜고 수를 수정하고 그것이 작동하지 않는 경우 다시 요청해야합니다.

+0

나는 건물에서 경고문을 보았습니다. 나는 그것들을 모두 고쳐서 지금 작동한다. 고맙습니다! – user2924218