수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

c 언어 파일 입출력 문제

즐겨찾기

2023.04.01


질문 제목 : c언어에서 파일 저장은 되는데, 로딩이 에러납니다.저장하면 .txt 파일이 생성됩니다. 그런데 불러오기 하면 에러가 납니다.
주석에 추가 설명 첨부하였습니다.
왜 이런 오류가 생기는 건지 알려주시면 감사하겠습니다.질문 내용 : #include stdio.h
#include stdlib.h
#include string.h#define maxindex 10
#define maxname 20
#define filename_lenght 40// 구조체로 고친 편의점 프로그램
// 하나의 상품 정보를 구조체로 선언
typedef struct info
{
char name [maxname]; // 제품명
char company [maxname]; // 제조사
int code; // 제품번호
int price; // 가격
int amount; // 수량
int sale; // 할인율
}info;

// 함수 선언부
int menuinput ( void );
void inputs ( int *nowindex, int *flag, info goods[] );
void deleting ( int *nowindex, int *flag, info goods[] );// 메인 함수 시작
void main (void)
{
// 위의 구조체 덩어리를 10개 선언
info goods [maxindex];
info *fileinfo;

char filename[ filename_lenght ];
file *fp = null;
int nowindex = 0; // 현재 색인 int menu = 0;
int flag = 0; // 중복 검사 변수
int rw = 0; int i = 0; // 반복 변수 선언
int j = 0;
while(1)
{ // 출력
printf( ┌───────────────────────────────┐\n
│ │\n
│ 편의점 관리 시스템 │\n
│ │\n
└───────────────────────────────┘\n);
printf(\n =================================================================\n\n); printf(\t\t현재 등록된 제품 수: %d 명\n\n\n, nowindex);
printf(\t\t제품번호 제품명 가격 수량 할인율 제조사);
printf(\n ┌──────────────────────────────────────┐\n);

for(i=0; inowindex; i++)
{
printf(\t\t%6d %-8s %-8d %-8d %6d %% %-8s \n, goods[i].code, goods[i].name, (int)(goods[i].price-(goods[i].price*goods[i].sale)/100),
goods[i].amount, goods[i].sale, goods[i].company);
} printf( └──────────────────────────────────────┘\n\n);
printf(\n ====================================================================\n\n);
menu = menuinput( ); switch( menu )
{
case 1:
{
inputs( &nowindex, &flag, goods ); // 입력 함수
nowindex++;
}break; case 2:
{
deleting( &nowindex, &flag, goods);
nowindex--;
system(pause);
}break; case 3:
{
printf(\n\t\t1. 저장하기\n);
printf(\t\t2. 불러오기\n);
printf(\n\t\t입출력 메뉴를 선택하세요: );
scanf(%d, &rw); // 저장하기
if (rw ==1)
{
printf(\t\t저장할 파일 이름(.txt제외) : );
scanf(%s, filename);
strcat_s( filename, filename_lenght, .txt);

// 파일 쓰기를 연다
fp = fopen( filename, w); if( 0 == fp )
{
puts(\t\t파일열기 실패);
return;
} // 데이터 쓰기
for( i=0; inowindex; i++ )
{
fprintf( fp, 제품번호 : %d\n, goods[i].code);
fprintf( fp, 제품명 : %s\n, goods[i].name);
fprintf( fp, 가격 : %d\n, goods[i].price);
fprintf( fp, 수량 : %d\n, goods[i].amount);
fprintf( fp, 할인율 : %d\n, goods[i].sale);
fprintf( fp, 제조사 : %s\n, goods[i].company);
}
// 파일 닫기
fclose( fp );
} // 불러오기
else if (rw ==2)
{
printf(\t\t불러올 파일 이름(.txt제외) : );
scanf(%s,filename);
strcat_s( filename, filename_lenght, .txt);

fp = fopen( filename, r);
if( 0 == fp )
{
puts(파일열기 실패);
return;
}

/* 저장은 완료. 불러오기 에러. 가설 및 시도 1.

출력 부분에서 문제가 되는 것 같음.
그래서 입력 받을때, 서식문자만 넣고 저장을 한 후
fscanf 함수의 2번째 인자에서 저장된
서식문자만 빼보려고 했지만 아무것도 출력되지 않음.

가설 및 시도 2. fscanf 함수가 혹시 2번째 인자를 3번째 인자에 전달하는 것은 아닐까
fscanf 함수의 2번째 인자에 ~ 이런 문자가 아닌
fscanf( fp, goods[i]code , &goods[i]code);
위와 같이 넣으면 에러. 가설 및 시도 3. 현재 코딩이 화면을 없애면서 계속 출력해 나아가는 방식이라
이것이 문제가 되나 싶어 system(pause)를 걸어서
일단 불러온 파일이 출력되나 살펴보았지만
출력 자체가 안되고 있음.
일부 문자가 깨지는 현상을 보아 구조체 멤버값이
겹칠 수 있다는 생각. */ for( i=0; imaxindex; i++ )
{
fscanf( fp, 제품번호 : %d\n, &goods[i].code);
fscanf( fp, 제품명 : %s\n, goods[i].name);
fscanf( fp, 가격 : %d\n, &goods[i].price);
fscanf( fp, 수량 : %d\n, &goods[i].amount);
fscanf( fp, 할인율 : %d\n, &goods[i].sale);
fscanf( fp, 제조사 : %s\n, goods[i].company);
}
system(pause);
/s fclose( fp );
}
}break; case 0:
break; default :
{
printf(\t\t오류: 잘못된 번호를 입력하셨습니다.\n\n);
system(pause);
break;
}
}// switch 함수 끝
if (menu == 0)
{
break;
}
system(cls);
}//while 함수 끝
}// main 함수 끝
// 함수 정의부// 메뉴 함수
int menuinput ( void )
{
int menu = 0; printf(\t\t1. 제품 입력\n
\t\t2. 제품 삭제\n
\t\t3. 파일 입출력\n
\t\t0. 종료\n\n);
printf(\t\t메뉴를 선택하세요: );
scanf(%d, &menu);
return menu;
}//입력 함수
void inputs ( int *nowindex, int *flag, info goods[] )
{
int newid = 0;
int i; while( 1 )
{
// 제품 코드 중복 검색
printf(\n\n\t\t새 제품 코드를 입력하세요: );
scanf(%d, &newid); // 검색 중
for( i=0; i*nowindex ; i++)
{
// 찾으면
if( newid == goods[i].code )
{
printf(\t\t입력하신 코드는 사용 중입니다.\n);
*flag = 1;
break; // 찾은 상태에서 더이상 for 문으로 i 증가시키지 말고, 멈춘 상태로 계속 반복
}
// 못찾으면
else
{
*flag = 0; // 같은거 못찾으면 깃발 초기화
}
} //못 찾으면 while문 통과
if ( *flag == 0 )
{
goods[i].code = newid;
break;
}
}
puts(); printf(\t\t제품명: ); // 문자열은 & 안붙임
scanf(%s, goods[*nowindex].name); // 2차원 배열에 입력받을 때 행만 지정한다. name[nowindex][maxname] 하면, 0행의 10열부터 입력( [0][0~9]까지 미사용)하므로 입력 불가.
puts();
printf(\t\t가격: );
scanf(%d, &goods[*nowindex].price);
puts();
printf(\t\t수량: );
scanf(%d, &goods[*nowindex].amount].amount);
puts();
printf(\t\t할인율: );
scanf(%d, &goods[*nowindex].sale);
puts();
printf(\t\t제조사: );
scanf(%s, goods[*nowindex].company); // 제조사도 문자열 2차원 배열 return ;
}// 지우기 함수
void deleting ( int *nowindex, int *flag, info goods[] )
{
int deleteid = 0;
int deleteindex = 0;
int i = 0;
int j = 0;

while(1)
{
printf(\t\t삭제할 제품 코드를 입력하세요: );
scanf(%d, &deleteid); for( i=0; i*nowindex; i++)
{
//찾으면
if ( deleteid == goods[i].code )
{
printf(\t\t해당 자료를 삭제합니다.\n\n); for( ; i*nowindex+1; i++ ) // 구조체는 계산 연산 불가. 대입 연산 가능.
{
goods[i].code = goods[i+1].code;
goods[i].price = goods[i+1].price;
goods[i].amount = goods[i+1].amount;
goods[i].sale = goods[i+1].sale;
strcpy(goods[i].name, goods[i+1].name); // 구조체는 name 도 1차원 배열
strcpy(goods[i].company, goods[i+1].company);
}
*flag = 1;
break; // 검색 for 문 빠져나감
}
}
if( *flag == 1 )
{
break; //while 문을 벗어남
}
// 못 찾으면
printf(\t\t입력한 제품 코드는 존재하지 않습니다.\n\n);
} //while 문 끝
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2700510 c언어를 어케하면 잘할수 있을까요.. 연연두 2025-07-05
2700484 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) 날위해 2025-07-05
2700426 인터넷 창 띄우는 질문이요 (1) 정훈 2025-07-04
2700400 원넓이를 계산이요 ㅜㅜ 천칭자리 2025-07-04
2700368 if에 관해서 질문이요... Orange 2025-07-04
2700339 이거 결과값이 왜이런건지.. (4) 그댸와나 2025-07-04
2700313 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) 크나 2025-07-03
2700287 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) 아련나래 2025-07-03
2700264 문자와 숫자 동시에 입력??? 글고운 2025-07-03
2700236 txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) 미국녀 2025-07-03
2700211 전위 연산자 (2) 어른처럼 2025-07-02
2700183 C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; 피스케스 2025-07-02
2700150 꼭좀 도와주세요ㅠㅠㅠ 호습다 2025-07-02
2700095 연산문제...질문... 오빤테앵겨 2025-07-01
2700070 while문 , 3의배수 출력하는 프로그램좀 짜주세욤. 횃불 2025-07-01
2700041 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? 헛장사 2025-07-01
2700012 배열// (1) 전갈자리 2025-07-01
2699895 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) 선아 2025-06-30
2699842 질문을 너무 많이 하네여.....죄송.... (2) 해님꽃 2025-06-29
2699816 오류 질문입니다.. (1) 해비치 2025-06-29
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com