[완료]while(1)에서 엔터키를 입력해도 탈출하고 싶어요.
글쓴이: -@Naver / 작성시간: 토, 2020/05/23 - 6:50오후
무한루프를 돌리는 상황에서,
엔터키를 누르거나,
숫자1을 10개 입력하면 종료되는 프로그램을 만든다고 가정할 때.
else if 의 break 는 탈출이 되는데,
if 의 break 는 탈출이 안됩니다.
if(str[0] == '\n' || str[1] == '1' && strlen(str) == 10) 로
3개를 묶어서 break문을 하나로 해도,
여전히 엔터키는 탈출이 안됩니다.ㅠㅠ
에러나 경고 메시지는 없고,
컴파일 결과창에서도 엔터키 탈출 빼고는 다 됩니다.ㅠㅠ
제가 어느 부분을 수정하면 엔터키 탈출도 가능할까요?
실력자 분들의 답변을 기다립니다.
읽어주셔서 고맙습니다.
Forums:
항상 레퍼런스를 가까이.
항상 레퍼런스를 가까이.
레퍼런스를 보지 않는 자는 레퍼런스를 본 사람이 답변을 달아줄 때까지 기다려야 하는 운명을 맞게 됩니다.
https://en.cppreference.com/w/c/io/gets
gets 함수는 개행 문자('\n')를 삼켜 버립니다.
차라리
if (str[0] == '\0')
를 쓰시지요.조언 감사합니다. 덕분에 해결되었습니다^^
고맙습니다. 말씀해주신대로 if를 수정했더니 if와 else if까지 확실히 break가 됩니다.
레퍼런스 링크까지 친절하게 올려주셔서 덕분에 읽어봤습니다.
솔직히...레퍼런스에 관한 내용을(물론, 번역사이트를 이용함 ㅠㅠ 영어 문외한 수준 ㅠㅠ)
천천히 읽었는데, 아직은 다 이해하지는 못했습니다.
Quote 부분의 내용이 핵심 내용인 듯 합니다. 고맙습니다.
언제나 레퍼런스도 읽는 습관을 들이도록 늘...노력하겠습니다. 고맙습니다^^
초보 C언어 학습자. 실력자분들의 도움이 절실합니다.
line-by-line 으로 디버그를 해보세요.
line-by-line 으로 디버그를 해보세요.
리턴키를 눌렀을 때 gets() 다음으로 떨어진 다음 str[] 배열에 어떤 값이 들어가 있는지 확인해 보세요.
한가지 gets() 대신에 fget()를 쓰는 것을 고려해 보세요.
조언 고맙습니다. 디버그 시도로 if{} 가 안 먹힌다는 걸 확인했습니다.
한 줄씩 디버그를 시도했는데,
dev c++ 툴이 그냥 죽어버리더군요. ㅠㅠ
(디버그 할 줄 알아야 프로그램의 세계에서 좀 편하게 지낼텐데ㅠㅠ)
조언해주신대로 gets 를 포함한 앞 뒤줄에 printf 로 찍었더니.
그 줄을 실행하지 않더라구요.ㅠㅠ
덕분에 실행하지 않음을 알 수 있었습니다.
고맙습니다.
또한 덧붙여서 fgets 를 추천해주신 점도 감사합니다.
우분투에서,
요즘...버퍼오퍼플로 때문에...제 속이 타들어가는 중이거든요.
버퍼오버를 피하고자 소스를 고쳐봤더니,
스택오버플로 방지 메시지까지 보이더군요.
(우분투는 스택오버플로 방지를 위한 detect~ 어쩌고 하는 기능의 메시지가 있다는 것도 처음 알았습니다ㅠ)
fgets 쓰면...좀..나아지겠죠?
디버그 방법에 대한 설명, fgets 조언...정말 고맙습니다.
늘 과정까지도 노력하겠습니다. 감사합니다.
초보 C언어 학습자. 실력자분들의 도움이 절실합니다.
dev c++ 툴은 최근에는 거의 업데이트가 되지
dev c++ 툴은 최근에는 거의 업데이트가 되지 않는 툴 아닌가요?
Eclipse를 써보세요. 아니면 Netbean이나요.
안그래도 데브 삭제하고 뭘로 쓸까 했는데 조언 고맙습니다
디버그 사라져서 에잇. 하고 지웠는데요.
비주얼은 너무 무겁고.
뭘로 할까 했는데.
툴 추천 고맙습니다^^
정말 고마워요^^~씨익^^
초보 C언어 학습자. 실력자분들의 도움이 절실합니다.
댓글 달기