【发布时间】:2018-05-16 08:39:53
【问题描述】:
#define NAME_LEN 20
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#pragma warning(disable:4996)
typedef struct bank
{
char *name[NAME_LEN];
int id;
int money;
struct bank *next;
} bank;
bank *head, *tail; // 노드의 처음과 끝
void Init_account(FILE *fp); // 노드의 처음과 끝에 메모리 할당하고, 파일에서 입력을 받도록 하는 함수
void Make_account(FILE *fp); // 계좌를 생성하는 함수
void Deposit(FILE *fp); // 입금 함수
void WithDraw(FILE *fp); // 출금 함수
void WriteAccount(FILE *fp); // 계좌의 정보를 저장하는 함수
void Account_inquire(void); // 계좌를 조회하는 함수
void ReadAccount(int id, char *name, int money); // 텍스트 파일에서 입력을 받는 함수
void Init_account(FILE *fp)
{
int id;
char name[NAME_LEN];
int money;
head = (bank *)malloc(sizeof(bank));
tail = (bank *)malloc(sizeof(bank));
head->next = tail;
tail->next = tail;
while (fscanf(fp, "%d %s %d", &id, name, &money) == 3){ // 정수형, 문자형, 정수형 3개일 때만 입력을 받음
ReadAccount(id, name, money);
}
}
void ReadAccount(int id, char *name, int money)
{
bank *t;
t = (bank *)malloc(sizeof(bank));
t->id = id;
strcpy(t->name, name);
t->money = money; // this code has problem //
t->next = head->next; // 다음 노드를 가리킴
head->next = t; // 노드의 처음을 가리킴
}
void Make_account(FILE *fp)
{
int id;
char name[NAME_LEN];
int money;
bank *t;
t = (bank *)malloc(sizeof(bank));
printf("\n*********계좌 생성*********\n");
printf("계좌번호 : "); scanf("%d", &id);
printf("예 금 주 : "); scanf("%s", name);
printf("입 금 액 : "); scanf("%d", &money);
t->id = id;
strcpy(t->name, name);
t->money = money;
t->next = head->next;
head->next = t;
WriteAccount(fp); // 저장하는 함수로 파일 포인터를 넘겨줌
}
void Deposit(FILE *fp)
{
int id;
int money;
bank *t;
printf("계좌번호 : "); scanf("%d", &id);
printf("입 금 액 : "); scanf("%d", &money);
for (t = head->next; t != tail; t = t->next)
{
if (t->id == id)
{
t->money += money; // 잔액에 입금할 금액을 더해서
WriteAccount(fp); // 저장
return;
}
}
printf("없는 계좌번호입니다.\n");
}
void WithDraw(FILE *fp)
{
int id;
int money;
bank *t;
printf("계좌번호 : "); scanf("%d", &id);
printf("출 금 액 : "); scanf("%d", &money);
for (t = head->next; t != tail; t = t->next)
{
if (t->id == id)
{
if (t->money
{
printf("출금액이 잔액을 초과할 수 없습니다.\n");
return;
}
else
{
t->money -= money; // 잔액에서 출금액을 빼서
}
WriteAccount(fp); // 저장
return;
}
}
printf("없는 계좌번호입니다.\n");
}
void Account_inquire(void)
{
bank *t;
for (t = head->next; t != tail; t = t->next)
{
printf("\n*********잔액 조회*********\n");
printf("계좌번호 : %d\n", t->id);
printf("예 금 주 : %s님\n", t->name);
printf("잔 액 : %d원\n\n", t->money);
}
}
void WriteAccount(FILE *fp)
{
bank *t;
rewind(fp); // 파일 읽는 포인터 지점을 맨 첨으로 돌리는 함수
for (t = head->next; t != tail; t = t->next)
{
fprintf(fp, "%d %s %d\n", t->id, t->name, t->money);
}
}
int main()
{
int input;
FILE *fp;
fp = fopen("data.txt", "r+"); // 파일모드가 r+일 경우 읽고쓰기를 동시에 수행 합니다.
Init_account(fp);
do
{
printf("계좌 생성&관리 프로그램입니다. 원하시는 번호를 입력하세요.\n");
printf("*********************************************\n");
printf("1)계좌 생성 2)계좌 조회 3)입금 4)출금 5)종료\n");
printf("*********************************************\n");
printf("입력 >");
scanf("%d", &input);
switch (input){
case 1:
Make_account(fp);
break;
case 2:
Account_inquire();
break;
case 3:
Deposit(fp);
break;
case 4:
WithDraw(fp);
break;
case 5:
input = 0;
free(head); // 종료하면서 메모리 반환
free(tail);
break;
default:
printf("잘못 입력하셨습니다. \n");
return main();
}
}
while (input != 0);
}
我是韩国人。
我为我的家庭作业制作了“银行管理程序代码”。
但是我的代码有问题。(请忽略韩国)
当我运行我的代码时,错误
无法将参数 '1' 转换为 'char*' 的 'char**' 到 'char* strcpy(char*, const char*)'。
我不知道这个问题。
所以我在那个部分加上 *。
但问题并没有解决。
我的代码有问题吗?
请帮帮我。
【问题讨论】:
-
return main();这看起来很可疑。你的问题可能在这里:char *name[NAME_LEN]; -
char *name[NAME_LEN];==>char name[NAME_LEN];或许 -
每个人都非常感谢你。你救了我的命和时间。真的非常感谢。
-
提示:缩进你的代码,不要在每一行行之间放一个空行。
-
欢迎来到 SO。未来问题提示:为了让更多读者对您的问题感兴趣,您应该提供MCVE。这意味着您应该删除所有与问题无关的代码。