c언어 funttion 하고 struct를 배워서 코드를 짜는데, 화면이 뜨고 나서 멈추네요, 오류가 뭔지 뜨지도 않아서 어디를 고쳐야 할지 모르겠습니다.
손님 숫자를 넣어서 그 숫자에 따라 다른 값을 곱해서 총 금액을 얻어서 영수증을 출력하는건데
오류라도 뜨면 고쳐서 해보는데, 컴파일하고 런이 된 후에 화면이 뜨고나서 멈추네요
--------------------------------------------
#include
#include // for strtok
#include
struct ticket
{
int number[10];
int price[10];
};
void inputNumber(struct ticket *data, int NUMBER1);
void displayPrice(struct ticket *data, int PRICE1);
void findPrice(struct ticket *data, int NUMBER1);
int main()
{
struct ticket *data;
int PRICE1;
int NUMBER1;
printf("Ticket receipt system\n");
printf("Input the number of customers: \n ");
scanf("%d", &NUMBER1);
data=(struct ticket *)calloc(NUMBER1,sizeof(struct ticket));
inputNumber(data, NUMBER1);
displayPrice(data, PRICE1);
findPrice(data, NUMBER1);
system("pause");
}
void inputNumber(struct ticket *data, int NUMBER1)
{
int i;
FILE *fout; // write file
FILE *fin;
fout =fopen("receipt.txt", "w");
for(i=0; i
{
fscanf(fin,"%d %d", data[i].number, data[i].price);
}
fclose(fout);
}
void displayPrice(struct ticket *data, int PRICE1)
{
int i;
//display to screen
printf("price of ticket:\n");
for(i=0; i
{
printf(" %d ", data[i].price);
}
}
void findPrice(struct ticket *data, int NUMBER1)
{
int i;
int total;
if(NUMBER1<=10)
total=NUMBER1*7;
else if ((10<=NUMBER1) && (NUMBER1<20))
total=NUMBER1*6;
else if ((20<=NUMBER1)&&(NUMBER1<50))
total=NUMBER1*5;
else if (50<=NUMBER1)
total=NUMBER1*4;
printf("£%s", &total);
}
첨부 | 파일 크기 |
---|---|
![]() | 1.55 KB |
오류는 바로 나오네요. printf 구문 두곳 모두
오류는 바로 나오네요.
printf 구문 두곳 모두 인자값 참조가 잘못되었고, fscanf 역시 잘못 사용되었습니다.
모듈을 잘라서 하나씩 시도해보시길 바랍니다.
---------------------------------
제일 왼쪽이 저입니다 :)
답변 감사합니다
dev 를 사용하는데요, 부분적으로 해도 오류가 안뜨고 부분적으로 작동만 되네요.
위에 설명하신 인자값을 어떻게 수정하는게 되는건가요?
아래와 같이 바꿨는데 아직 오류가 뜹니다
#include
#include // for strtok
#include
struct ticket
{
int number[10];
int price[10];
};
void inputNumber(struct ticket *data, int NUMBER1);
void displayPrice(struct ticket *data, int PRICE1);
void findPrice(struct ticket *data, int NUMBER1);
void writeReceipt(struct ticket *data,int PRICE1);
int main()
{
struct ticket *data;
int PRICE1;
int NUMBER1;
printf("Ticket receipt system\n");
printf("Input the number of customers: \n ");
scanf("%d", &NUMBER1);
data=(struct ticket *)calloc(NUMBER1,sizeof(struct ticket));
inputNumber(data, NUMBER1);
findPrice(data, NUMBER1);
displayPrice(data, PRICE1);
writeReceipt(data,PRICE1);
system("pause");
}
void inputNumber(struct ticket *data, int NUMBER1)
{
int i;
for(i=0; i {
scanf("%d", data[i].number);
}
}
void writeReceipt(struct ticket *data,int PRICE1)
{
FILE*fin=fopen("data.txt","r");
int i;
FILE *fout; // write file
FILE *fin;
fout=fopen("receipt.txt", "w");
for(i=0; i {
fscanf(fout,"%d ",data[i].price);
}
fclose(fout);
}
void displayPrice(struct ticket *data, int PRICE1)
{
int i;
//display to screen
printf("price of ticket:\n");
for(i=0; i {
printf(" %d ", data[i].price);
}
}
void findPrice(struct ticket *data, int NUMBER1)
{ int number[10],price[10];
int i;
int total;
if(NUMBER1<=10)
total=NUMBER1*7;
else if ((10<=NUMBER1) && (NUMBER1<20))
total=NUMBER1*6;
else if ((20<=NUMBER1)&&(NUMBER1<50))
total=NUMBER1*5;
else if (50<=NUMBER1)
total=NUMBER1*4;
printf("£ %d", &total);
}
하나씩 집어드리기보다는 더 간단한 main 프로그램을
하나씩 집어드리기보다는 더 간단한 main 프로그램을 만들어 보시라고 하고 싶습니다.
아무래도 본인이 작성한 코드가 아닌것 같네요.
코드에 대한 이해없이 그냥 원하시는 결과만을 생각하시고 임의로 고쳐서 발생하는 문제 같습니다.
일단은 scanf 사용법이 잘못되었습니다.
간단한 scanf 프로그램부터 직접 작성해보세요.
---------------------------------
제일 왼쪽이 저입니다 :)
좀 더 간단히 고쳐봤는데요
숫자값에 따라 금액 이 달라지긴 하는데, 금액이 이상하게 뜨네요
그리고 결과 값을 파일에 쓰려는 구문도 고쳐보고 있는데요, 계속 아무 내용도 없는 텍스트 파일이 생겨납니다.
아무래도 자꾸 과제같다는 생각이
아무래도 자꾸 과제같다는 생각이 듭니다.
어찌됐든...전체 흐름을 생각하지않고 문제만을 바라보면 이 프로그램을 원하시는대로 수정하지 못할 겁니다....
현재 문제는 1. 금액이 이상하게 나오는 문제, 결과가 값이 파일에 안써지는 문제만 보이지만,
실제로는.. 내부적인 포인터 접근 오류, 잘못된 함수 사용입니다.
가장 큰 문제는 1.잘못된 포인터 사용 2.함수 사용 오류 입니다.
각 모듈을 테스트하기 위한 작은 프로그램을 먼저 만드시고 사용되는 함수에 대한 이해를 하신다음에 다시 접근하시는 걸 추천합니다.
---------------------------------
제일 왼쪽이 저입니다 :)
댓글 달기