2014-11-16 4 views
0

좋아요. 그래서 저는 매일 볼륨을 추적하고 각기 다른 위치에서받는 양을 나누기위한 프로그램을 작성하고 있습니다. 건물에는 8 개의 선이 있습니다. 텍스트 파일은 요일 날짜, 건물의 총 볼륨 및 각 위치의 볼륨 (PEN)으로 구성됩니다.텍스트 파일을 읽는 중 오류가 발생했습니다.

지금 두 가지 문제가 발생하고 있습니다. 둘 다 내 readDay 함수와 분리되어 있습니다. 여기서 result = fscanf (pi-> Date, 40, fp); 문제는 입니다. 1. 'int'를 'const char *'유형의 매개 변수로 전달하는 호환되지 않는 정수 대 포인터 변환 'FILE *'형식의 매개 변수에 'char [40]'을 전달하는 호환되지 않는 포인터 유형 (일명 'struct_system * ')

누구든지 내게이 이슈의 의미를 설명 할 수 있습니까? 또는 언제든지 물어볼 수있는 정보를 더 필요로하는 경우.

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

struct Day { 
char Date[40]; 
int Total; 
int Pen1; 
int Pen2; 
int Pen3; 
int Pen4; 
int Pen5; 
int Pen6; 
int Pen7; 
int Pen8; 


}; 

const char fileName [] = "UPS.txt"; 

void StartRecord(void); 
void printDay(struct Day* pi); 
void writeDay(FILE *fp, struct Day *pi); 
int readDay(FILE *fp, struct Day *pi); 
void readFile(void); 
void addDay(void); 



int main(int argc, const char * argv[]) { 

StartRecord(); 

int choice; 
printf("Enter 1 to read this file or enter 2 to add to it."); 
scanf("%d", &choice); 
switch (choice) { 
    case 1: readFile(); 
     break; 
    default: printf("Not a valid choice\n"); 
     break; 
} 
getchar(); 
getchar(); 


} 

void StartRecord(void) { 

int count; 
int i; 
struct Day aDay; 
FILE *fp; 

fp = fopen(fileName, "w"); 
if (fp != NULL) { 
    printf("Enter volume for how many days? "); 
    scanf("%d", &count); 
    for (i = 0; i < count; ++i) { 
     printf("What is today's date? "); 
     gets(aDay.Date); 
     printf("What was the total volume for the building for the day?"); 
     scanf("%d", &aDay.Total); 
     printf("What was the volume for Pen 1? "); 
     scanf("%d", &aDay.Pen1); 
     printf("What was the volume for Pen 2? "); 
     scanf("%d", &aDay.Pen2); 
     printf("What was the volume for Pen 3? "); 
     scanf("%d", &aDay.Pen3); 
     printf("What was the volume for Pen 4? "); 
     scanf("%d", &aDay.Pen4); 
     printf("What was the volume for Pen 5? "); 
     scanf("%d", &aDay.Pen5); 
     printf("What was the volume for Pen 6? "); 
     scanf("%d", &aDay.Pen6); 
     printf("What was the volume for Pen 7? "); 
     scanf("%d", &aDay.Pen7); 
     printf("What was the volume for Pen 8? "); 
     scanf("%d", &aDay.Pen8); 
     getchar(); 
     writeDay(fp, &aDay); 
    } 
    fclose(fp); 
}else { 
    printf("\nError opening file.\n"); 
} 

} 

void readFile(void) { 
FILE *fp; 
struct Day aDay; 

fp = fopen(fileName, "r"); 
if (fp != NULL) { 
    while (readDay(fp, &aDay)) { 
     printDay(&aDay); 
    } 
    fclose(fp); 
} else { 
    printf("\nError opening File!\n"); 
} 
} 

void writeDay(FILE *fp, struct Day *pi) { 
fprintf(fp, "%s\n", pi->Date); 
fprintf(fp, "%d\n", pi->Total); 
fprintf(fp, "%d\n", pi->Pen1); 
fprintf(fp, "%d\n", pi->Pen2); 
fprintf(fp, "%d\n", pi->Pen3); 
fprintf(fp, "%d\n", pi->Pen4); 
fprintf(fp, "%d\n", pi->Pen5); 
fprintf(fp, "%d\n", pi->Pen6); 
fprintf(fp, "%d\n", pi->Pen7); 
fprintf(fp, "%d\n", pi->Pen8); 
} 

int readDay(FILE *fp, struct Day *pi) { 
int result; 

fgetc(fp); // read the endline 
result = fscanf(pi->Date, 40, fp); 
if (result == EOF) { 
    return 0; 
} 
fscanf(fp, "%d", &pi->Total); 
fscanf(fp, "%d", &pi->Pen1); 
return 1; 

} 

void PrintDay(struct Day *pi) { 
printf("Records for the day of: %s\n", pi->Date); 
printf("Total Volume: %d", pi->Total); 
printf("Volume for Pen 1: %d", pi->Pen1); 
printf("Volume for Pen 2: %d", pi->Pen2); 
printf("Volume for Pen 3: %d", pi->Pen3); 
printf("Volume for Pen 4: %d", pi->Pen4); 
printf("Volume for Pen 5: %d", pi->Pen5); 
printf("Volume for Pen 6: %d", pi->Pen6); 
printf("Volume for Pen 7: %d", pi->Pen7); 
printf("Volume for Pen 8: %d", pi->Pen8); 
printf("\n\n"); 

} 

답변

0

귀하의 주장은 잘못된 방식입니다. 이 :

fscanf(pi->Date, 40, fp); 

해야한다 :

fscanf(fp, pi->Date, 40); 

을 이미 더 아래 몇 줄을 가지고처럼.

다른 의미에서, 당신이하려는 것은 매우 이상합니다. 문자 그대로 정수로 읽을 수는 없습니다. 아마도

fscanf(fp, "%s", pi->Date); 

나 :

fscanf(fp, "%39s", pi->Date); 

또는 유사한 당신은 아마 같은 것을 원한다.

+0

날짜에 대한 나의 입력은 예를 들어 10/10/192와 같이 보일 것입니다. 그래서 나는 정수를 알아 냈다. 그러나 각 숫자 사이의 '/'때문에 id가 'char'포인터를 만들 필요가있다. @Paul Griffiths – Zanderg

+0

그래서 나는 데이터를 인쇄 한 후에 데이터를 인쇄 할 때 데이터 인쇄를 멈추지 않을 것이므로 다른 문제가 있습니다. 인쇄를 중단하는 방법을 알아 내야 할지를 정확히 알지 못합니다. @ 폴 그릿 티스. – Zanderg

관련 문제