goto문을 사용할수있는 조건을 알려주세요
소1유물
질문 제목 : goto문 사용조건질문 요약 :goto문 사용조건질문 내용 :
#includestdio.h
#includeconio.h
#includestring.h // 검색할때 strcmp함수와 삭제할때 strcpy를 쓰기위해서
#includestdlib.h // 입력을 중단할때 atoi함수를 쓰기위해서
typedef struct date{ // 데이터 구조체
char name[100]; // 이름
char tel[100]; // 전화번호
}date;
int count1=0; // 포인터대용 전역변수
int se; // 검색함수를 위한 전역변수
void menu1(date *a); // 입력함수
void menu2(date *a); // 삭제함수
void menu3(date *a); // 검색함수
void menu4(date *a); // 출력함수
int main()
{
date a[100];
int su;
for(;1;)
{
puts(--------메뉴-------);
puts(-------------1.입력);
puts(-------------2.삭제);
puts(-------------3.검색);
puts(-------------4.출력);
puts(-------------5.종료);
fputs(선택할 메뉴 : ,stdout);
scanf(%d,&su);
if(su==1)
menu1(&a); // 입력함수 호출
else if(su==2)
menu2(&a); // 삭제함수 호출
else if(su==3)
menu3(&a); // 검색함수 호출
else if(su==4)
menu4(&a); // 출력함수 호출
else if(su==5)
break; // 종료
else
{
puts(\n1~5중 하나를 입력하시오\n);
continue;
}
}
puts(\n\n프로그램을 마칩니다);
getch();
return 0;
}
void menu1(date *a) // 입력함수
{
puts([입력] : 이름을 입력받을때 1을 입력하면 입력중단\n);
for(;1;)
{
printf(--%d번째 데이터 입력--\n,count1+1);
fputs(이름 : ,stdout);
fflush(stdin);
scanf(%s,&a[count1].name);
if(atoi(a[count1].name)==1) // 문자열을 int형으로 변환시 1일경우
break;
fflush(stdin);
fputs(전화번호 : ,stdout);
scanf(%s,&a[count1].tel);
fflush(stdin);
count1++;
}
}
void menu2(date *a) // 삭제함수
{
int del; // 삭제할 데이터 선택변수
char call[20]=삭제된데이터;
if(count1==0)
{
fputs(입력된 데이터가 하나도없습니다 삭제를 중단합니다\n,stdout);
goto pang; // 삭제함수의 goto문 입구
}
puts([삭제] : x번째 데이터를 삭제함 0이하값일시 삭제작업을 중단);
for(;1;)
{
fputs(삭제할 데이터 : ,stdout);
scanf(%d,&del);
if(del=0)
{
fputs(삭제작업을 중단합니다\n,stdout);
pang: // 삭제함수의 goto문 출구
break;
}
else
{
strcpy(a[del-1].name,call);
strcpy(a[del-1].tel,call);
printf(%d번째 데이터를 삭제했습니다\n,del);
}
}
}
void menu3(date *a) // 검색함수
{
char name1[100]; // 이름검색시 필요한 문자열
char tel1[100]; // 전화번호검색시 필요한 문자열
int count; // 0~count1까지 검사하는 변수
if(count1==0)
{
fputs(입력된 데이터가 하나도없습니다 검색을 종료합니다\n,stdout);
goto iz; // 검색함수의 goto문 입구
}
puts([검색]\n);
for(;1;)
{
fputs(1.이름검색 2.전화번호검색 3.검색종료 : ,stdout);
scanf(%d,&se);
if(se==1)
{
fputs(이름 : ,stdout);
fflush(stdin);
scanf(%s,name1);
for(count=0;countcount1;count++)
{
if(strcmp(name1,a[count].name)==0)
{
printf(\n찾았습니다 --%d번째데이터--\n,count+1);
printf(이름 : %s\n,a[count].name);
printf(전화번호 : %s\n,a[count].tel);
}
}
}
else if(se==2)
{
fputs(전화번호 : ,stdout);
fflush(stdin);
scanf(%s,tel1);
fflush(stdin);
for(count=0;countcount1;count++)
{
if(strcmp(tel1,a[count].tel)==0)
{
printf(찾았습니다 --%d번째데이터--\n,count+1);
printf(이름 : %s\n,a[count].name);
printf(전화번호 : %s\n,a[count].tel);
}
}
}
else if(se==3)
{
iz: // 검색함수의 goto문 출구
break;
}
else
fputs(메뉴 1~3중 하나를 입력하시오\n,stdout);
}
}
void menu4(date *a) // 출력함수
{
int con;
if(count1==0)
{
fputs(입력된 데이터가 하나도 없습니다없습니다 출력을 중단합니다\n,stdout);
goto zin; // 출력함수의 goto문 입구
}
printf([출력] : 총 입력한 데이터는 %d개이며 그 내용을 모두 출력합니다\n\n,count1);
for(con=0;concount1;con++)
{
printf(--%d번째데이터--\n,con+1);
printf(이름 : %s\n,a[con].name);
printf(전화번호 : %s\n,a[con].tel);
}
zin: // 출력함수의 goto문 출구
}일단 컴파일러는 비쥬얼2008쓰고요...소스 너무 더러우니 색칠한 부분만 봐주세요...
초록색,파란색 goto문은 문제가 없는대 빨간색 goto문은 넣으면 에러가 납니다
그리고 그전에도 goto문을 쓰면 될때 안될때 거의 반반비율이에요
goto문을 쓸수있는 조건좀 알려주세요...그리고 goto문 출구로 ~~:을하면 항상 그 글이 항상 맨앞으로 당겨져서 스페이스바로 원위치로 되돌려놔야하는대 맨앞으로 당겨지는 이유가 있나요?
-
어서와
조언 감사합니다 안좋은거였군요
-
보물선
결론은 goto 문은 사용 하지 않는것입니다
윗분도 써 주셨지만 goto 문 안쓰고도 다 구현됩니다 초보를 넘어 서시려면 좀더 생각을 하시면 될듯 -
에일린
제대로된답변을 해드리지 못해서 죄송합니다만
goto문을 쓰면 일단 소스가 더러워지고 나중에 고치기도 힘듭니다
이런말이있죠 진정한 좋은프로그램은 만들때 어려워도 고칠때 쉬운 프로그램이 좋은프로그램이다
goto문을 쓰면 고치기 어려울뿐만 아니라 실력도 안늡니다
제어문들로만 해도 충분히 구현할수있으니 노력해보세요 ㅎㅎ
원하시는 답변이 아니라서 죄송합니다
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |