수다닷컴

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

c언어 무한루프에 안 빠지는 방법좀 알려주세요

늘솜

2023.04.01


질문 제목 : 무한루프 오류 안걸리기 질문 내용 :
#includestdio.h
#includestdlib.h
void insert(); //삽입 함수
void delete_list(); //삭제 함수
void delete_name(); //이름으로삭제 함수
void delete_number(); //학번으로삭제 함수
void delete_all(); //전부삭제 함수
void update(); //수정 함수
void update_name(); //이름으로수정 함수
void update_number(); //학번으로수정 함수
void print(); //출력 함수
void sort(); //버블소트
void swap(); //교체 함수
void search(); //검색 함수
void average(); //평균 함수
void help(); //도움말출력함수
typedef struct student // 학생 구조체 선언
{
char name[20]; // 이름 배열 선언
char number[10]; // 숫자 배열 선언
int p_score1;
int t_score;
int tel;
struct student * next;
}stdnt;
stdnt * head = null; //head포인터초기화
int count=0; //자료개수
int main()
{
while(1)
{
int num;
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 1.[삽 입] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 2.[삭 제] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 3.[수 정] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 4.[모든성적출력] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 5.[검 색] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 6.[평 균] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 7.[도 움 말] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(▒ 8.[종 료] ▒\n);
printf(▒▒▒▒▒▒▒▒▒▒▒▒▒\n);
printf(◇ 해당 번호를입력하세요:\n ☞);
scanf(%d, &num);
switch(num)
{
case(1):
insert();
break;
case(2):
delete_list();
break;
case(3):
update();
break;
case(4):
print();
break;
case(5):
search();
break;
case(6):
average();
break;
case(7):
help();
break;
case(8):
printf(프로그램을 종료합니다\n);
exit(1);
default:
printf(잘못 입력하셨습니다\n);
}
}
return 0;
}
void insert()
{
stdnt * tmp, * ptr=head; //tmp포인터,ptr포인터선언//tmp는linkedlist,ptr은비교를위해서선언
tmp=(stdnt*)malloc(sizeof(stdnt));
printf(♧ 이 름:\t);
scanbsp;scanf(%s,tmp-name);
while(ptr!=null)
{
if(strcmp(tmp-name, ptr-name)==0)
{
printf(\n같은 이름이 이미 존재합니다\n);
free(tmp); //tmp에저장했었던name자료초기화
return;
}
ptr=ptr-next; //ptr에연결되어있는list들을전부비교함
}
printf(♧ 학 번:\t);
scanf(%s,tmp-number);
printf(♧ 프로그래밍 점수:\t);
scanf(%d,&tmp-p_score1);
printf(♧ 토 익 점 수:\t);
scanf(%d,&tmp-t_score);
printf(♧ 전 화 번 호:\t);
scanf(%d,&tmp-tel);
tmp-next=head; //tmp-next에head의주소값을저장한후
head=tmp; //head의주소값은다음자료의next가이전의자료를가리킴
printf(♧삽입되었습니다.♧\n\n);
count++;
}
void delete_list()
{
int command;
printf(----------------------------------------------------\n);
printf(1.이름을 검색하여 삭제합니다.\n);
printf(2.학번을 검색하여 삭제합니다.\n);
printf(3.전부 삭제\n);
printf(----------------------------------------------------\n);
printf(◇해당 번호를 입력하세요:);
scanf(%d,&command);
switch(command)
{
case(1):
delete_name();
break;
case(2):
delete_number();
break;
case(3):
delete_all();
break;
default:
printf(잘못된 입력입니다\n);
break;
}
}
void delete_name()
{
stdnt * tmp = head;
char name[20];
if(head==null)
{
printf(삭제할 데이터가 존재하지 않습니다\n);
return;
}
printf(삭제할 이름을 입력해주세요:);
scanf(%s,name);
while(tmp!=null)
{
if(strcmp(tmp-name,name)==0) // tmp를따라가면서자료의이름을비교
{
if(head-next==null) // 자료가하나일경우...
{
free(tmp); // tmp를프리시키고
head=null; // head포인터주소에 null대입
printf(삭제 되었습니다\n);
return;
} // 자료가 하나가 아닐 경우...
strcpy(tmp-name,head-name); // 기존의 자료들을 다시 복사
strcpy(tmp-number,head-number);
tmp-p_score1=head-p_score1;
tmp-t_score=head-t_score;
tmp-tel=head-tel;
//return ;
}
tmp=tmp-next; // tmp의포인터를 이동하면서 반복
// return;
}
head=head-next;
free(tmp);
printf(삭제 되었습니다\n);
count--;
}
void delete_number()
{
stdnt * tmp = head;
char number[10];
if(head==null)
{
printf(삭제할 데이터가 존재하지 않습니다\n);
return;
}
printf(◇삭제할 학번을 입력해주세요:);
scanf(%s,number);
while(tmp!=null)
{
if(strcmp(tmp-number,number)==0)
{
if(head-next==null)
{
free(tmp);
head=null;
printf(삭제 되었습니다\n);
return;
}
strcpy(tmp-name,head-name);
strcpy(tmp-number,head-number);
tmp-p_score1=head-p_score1;
tmp-t_score=head-t_score;
tmp-tel=head-tel;
}
tmp=tmp-next;
}
head=head-next;
free(tmp);
printf(삭제 되었습니다\n);
count--;
}
void delete_all()
{
stdnt * ptr = head, * link; //가장처음자료를가리키는ptr포인터와 //구조체를가리키는link포인터선언
if(head==null)
{
printf(삭제할 데이터가 없습니다\n);
return;
}
while(ptr!=null)
{
link=ptr-next; //ptr을이동하며메모리를free시킴
free(ptr);
ptr=link;
}
printf(삭제 되었습니다\n);
head=null; //모든노드를삭제하고head의초기화
count=0; //자료개수0개
}
void print()
{
stdnt * tmp = head;
int command;
if(head==null)
{
printf(데이터가 존재하지 않습니다\n);
}
printf(----------------------------------------------------\n);
printf(1.이름 순서로 출력\n);
printf(2.프로그래밍 성적순으로 출력\n);
printf(3.토익 성적순으로 출력\n);
printf(----------------------------------------------------\n);
printf(◇해당 번호를 입력하세요:);
scanf(%d,&command);
if(command1||command3)
&nbsr /{
printf(잘못 입력 하셨습니다\n);
return;
}
sort(command); // 버블 소트로정렬
}
void sort(int command)
{
int i,j;
stdnt*temp[100];
temp[0]=head;
for(i=1;icount;i++)
{
temp[i]=temp[i-1]-next; //각 링크드리스트에temp[0],temp[1]..포인터부여
}
for(i=0;icount;i++)
{
for(j=0;jcount;j++)
{
switch(command)
{
case(1):
if(strcmp(temp[i]-name,temp[j]-name)0)
{
swap(&temp[i],&temp[j]); //조건에 맞으면 메모리주소를 바꿈
}
break;
case(2):
if(temp[i]-p_score1temp[j]-p_score1)
{
swap(&temp[i],&temp[j]);
}
break;
case(3):
if(temp[i]-t_scoretemp[j]-t_score)
{
swap(&temp[i],&temp[j]);
}
break;
}
}
}
printf(----------------------------------------------------\n);
printf( 이름 학번 프로그래밍 토익 전화번호\n);
printf(----------------------------------------------------\n);
for(i=0;icount;i++)
{
printf(%s %10s %12d %5d %5d\n, temp[i]-name, temp[i]-number, temp[i]-p_score1, temp[i]-t_score, temp[i]-tel);
}
}
void swap(stdnt **a, stdnt **b)
{
stdnt * temp;
temp = *a;
*a= *b;
*b= temp;
}
void update()
{
int command;
printf(----------------------------------------------------\n);
printf(1.이름을 검색하여 삭제합니다.\n);
printf(2.학번을 검색하여 삭제합니다.\n);
printf(3.전부 삭제합니다.\n);
printf(----------------------------------------------------\n\n);
printf(◇해당 번호를 입력하세요 : );
scanf(%d,&command);
//for()
switch(command)
{
case(1):
update_name();
break;
case(2):
update_number();
break;
default:
printf(잘못된 입력입니다\n);
}
}
void update_name()
{
char search[20];
stdnt*tmp=head;
if(head==null)
{
printf(수정할 데이터가 없습니다\n);
return;
}
printf(수정할 학생의 이름을 입력해주세요:\n);
scanf(%s,search);
while(tmp!=null)
{
if(strcmp(tmp-name,search)!=0)
{
printf(학번:);
scanf(%s,tmp-number);
printf(프로그래밍 점수:);
scanf(%d,&tmp-p_score1);
printf(토익 점수:);
scanf(%d,&tmp-t_score);
printf(전화번호:);
scanf(%d,&tmp-tel);
return;
}
if(tmp-next==null)
{
printf(일치하는 학생이 없습니다\n);
return;
}
tmp=tmp-next;
}
}
void update_number()
{
char search[10];
stdnt*tmp=head;
if(head==null)
{
printf(수정할 데이터가 없습니다\n);
return;
}
printf(수정할 학생의 학번을 입력해주세요:\n);
scanf(%s, search);
while(tmp!=null)
{
if(strcmp(tmp-number,search)!=0)
{
printf(학번:);
scanf(%s, &tmp-number);
printf(프로그래밍 점수:);
scanf(%d, &tmp-p_score1);
printf(토익 점수:);
scanf(%d, &tmp-t_score);
printf(전화번호:);
scanf(%d, &tmp-tel);
return;
}
if(tmp-next==null)
{
printf(일치하는 학생이 없습니다\n\n);
return;
}
tmp=tmp-next;
}
}
void search()
{
char search[20];
stdnt*tmp=head;
if(head==null)
{
printf(데이터가 존재하지 않습니다\n\n);
return;
}
printf(검색할 이름을 입력해주세요:\n);
scanf(%s,search);
printf(----------------------------------------------------\n\n);
printf(이름 학번 프로그래밍 토익 전화번호\n);
printf(----------------------------------------------------\n\n);
while(tmp!=null)
{
if(!strcmp(search,tmp-name))
{
printf(%s %10s %12d %5d %5d\n,tmp-name,tmp-number,tmp-p_score1,tmp-t_score,tmp-tel);
return;
}
tmp=tmp-next;
}
}
void average()
{
stdnt * tmp = head;
int command, total=0;
printf(----------------------------------------------------\n);
printf(1.프로그래밍 평균 성적\n);
printf(2.토 익 평균 성적\n);
printf(----------------------------------------------------\n\n);
if(head==null)
{
printf(데이터가존재하지않습니다\n\n);
return;
}
printf(◇해당 번호를 입력하세요:);
scanf(%d,&command);
if(command1||command2)
{
printf(잘못입력하셨습니다);
return;
}
if(command==1)
{
while(tmp!=null)
{
total+=tmp-p_score1; //tmp를 이동하며 프로그래밍값을 더함
tmp=tmp-next;
}
total=total/count; //자료갯수로 나눔
printf(프로그래밍의 평균성적은 %d입니다\n\n, total);
}
if(command==2)
{
while(tmp!=null)
{
total+=tmp-t_score; //tmp를 이동하며 토익값을 더함
tmp=tmp-next;
}
total=total/count;&nbnbsp; //자료갯수로 나눔
printf(토익점수의 평균성적은 %d입니다\n\n, total);
}
//total=total/count; //자료갯수로 나눔
//printf(프로그래밍의 평균성적은 %d입니다\n\n, total);
}
void help()
{
printf(----------------------------------------------------\n\n);
printf(명령어1번은 linkedlist에 삽입합니다.\n);
printf(명령어2번은 linkedlist에 삭제합니다.\n);
printf(명령어3번은 linkedlist에 수정합니다.\n);
printf(명령어4번은 linkedlist를 출력합니다.\n);
printf(명령어5번은 linkedlist에 검색합니다.\n);
printf(명령어6번은 성적의 평균을 구합니다.\n);
printf(명령어7번은 도움말을 표시합니다.\n);
printf(----------------------------------------------------\n\n);
}

여기서 void update() ---
이 함수에서 숫자말고 문자를 입력하면 무한루프가 되는데 이 오류를 잡는 방법좀 알려주세요... ㅜ.ㅜ
빠른 답변 부탁드려요

신청하기





COMMENT

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

  • 조히

    이제 문자 숫자 받을 수 있네요 ㄳㄳ

  • 꼼지

    스위치 문에서는 문자를 값으로 받을수 없지 않나요?

  • 베레기

    저기 스캔프에 %d 를 %s로 봐꿔보셧나요??

  • 흰두루

    void update()
    {
    int command;
    printf(\----------------------------------------------------\\n\);
    printf(\1.이름을 검색하여 삭제합니다.\\n\);
    printf(\2.학번을 검색하여 삭제합니다.\\n\);
    printf(\3.전부 삭제합니다.\\n\);
    printf(\----------------------------------------------------\\n

  • 재넘이

    문제있는부분을 따로좀 올려주시면;;; 아니면 표시라던가;;;

번호 제 목 글쓴이 날짜
2695355 c언어 for함수 미쿡 2025-05-19
2695327 안녕하세요 제가 이번에 좀 큰 프로그램을.. 악당 2025-05-19
2695295 mutex동기화의 thread기반 채팅 서버소스 질문입니다 그루터기 2025-05-19
2695270 질문이요..swap 관한겁니다..ㅠㅠ (3) 콩알녀 2025-05-19
2695244 노땅초보궁금한게 하나 있는데요..반복문(while문)초보자질문 (6) 큰꽃늘 2025-05-18
2695166 do while 문 어떤것이잘못된건지 모르겠어요 (2) 아이폰 2025-05-18
2695122 구조체에 대해 물어보고 싶은게 있습니다 ^^^.. (7) 수련 2025-05-17
2695091 txt 파일 입출력 후 2차 배열에 저장하기입니다. (3) 헛장사 2025-05-17
2695063 수도요금 프로그램좀 짜주세요. 시내 2025-05-17
2695033 답변좀요ㅠㅠ (1) 비사벌 2025-05-16
2695010 C++의 STL은 왜 굳이 템플릿화 시켜서 라이브러리를 만드나요? (초보수준의 질문..) (2) 엘보어 2025-05-16
2694958 로직이 변한다는 것에 대해서 궁금합니다. 튼동 2025-05-16
2694929 열혈강의 25-2 두번째 문제 질문 지우개 2025-05-15
2694900 dequeue 에서 리턴값 프린트 방법알려주세요 오늘 12시까지 대화방에 있습니다 도와주세요 미투리 2025-05-15
2694854 절대값을 구할때 (2) 그녀는귀여웠다 2025-05-15
2694827 이제 어떻게 공부해야할지 모르겠네요 새얀 2025-05-14
2694778 순열 계산요. 맛조이 2025-05-14
2694754 ShowWindow 함수를 이용하려 하는데 질문있습니다. (2) 파도 2025-05-14
2694731 리눅스 커널의 시작점 질문 미르 2025-05-13
2694702 이거 뭐가문제인가요 코드수정좀 (3) 맑은 2025-05-13
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

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