빈칸을 입력했을 때 break하는 코드 작성에 관하여
878
작성한 질문수 11
안녕하세요
printf("Input a color name (empty line to quit):\n");을 받고 입력을 할 때 빈칸인 상태로 엔터를 누르면 프로그램이 끝나도록 하는 코드를 작성하는 과정에서 난항을 겪어서요. 몇 가지 여쭤보려고 합니다.
제가 시도했던 것들은 밑에 두 가지입니다.
- if (strcmp(choice, '\0') == color_is_found) break;
- if (choice == NULL) break;
첫 번째는 문자열이랑 문자를 비교해서 실행이 제대로 안된다는 것을 깨달았고, 두 번째도 문자열이랑 0인 NULL은 == 연산자로는 비교를 할 수 없어서 제대로 작동이 되지 않았다고 생각합니다.(제가 찾아보고 내린 결론이라 맞는지도 궁금합니다)
그래서 if (scanf("%[^\n]%*c", choice) != 1) break;를 하면 아무것도 입력안하고 엔터를 입력했을 때 프로그램이 종료되는 것은 확인했지만 왜 위 코드가 이러한 기능을 수행하는지 아직 이해가 되지 않습니다.
질문은 두 가지입니다!
1. 제가 시도했던 것들이 실패한 이유에 대해 제가 생각한 결론(노랑 형광색 부분)이 맞는 것일까요?
2. 왜 if (scanf("%[^\n]%*c", choice) != 1) break;를 하면 첫입력에 엔터를 입력했을 때 프로그램이 종료가 되는건가요? [^\n]이 \n이 나올 때까지 입력을 받는다는 것과 %*c가 마지막글자(\n)을 없앤다는 것도 알고 있지만 왜 break로 연결이 되는지는 아직 이해를 못했습니다. 설명을 해주실 수 있을까요?
답변 1
1
안녕하세요
하나씩 답변드리겠습니다.
네 맞습니다, strcmp의 원형은 아래와 같습니다. 아래 원형에 맞게 문자열과 문자열을 비교해야 합니다.
int strcmp (const char* str1, const char* str2);
참고로, strcmp(문자열1, 문자열2)에서 문자열1과 문자열2가 같다면 strcmp는 0을 반환합니다.
color_is_found 변수 값도 확인해보세요 :)
그리고 다음 질문에서, scanf는 성공적으로 입력받은 수를 반환합니다.
가령 아래 코드의 경우,
아무것도 입력하지 않고 엔터를 누르면 결과화면에 0이 나오게 됩니다.
(직접 돌려보세요~)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
int main() {
char choice[20] = { 0, };
int result = scanf("%[^\n]%*c", choice);
printf("result : %d", result);
return 0;
}
질문자님이 제시하신 아래 코드에 따르면 1과 같지 않으면 break이니,
if (scanf("%[^\n]%*c", choice) != 1) break;
아무것도 입력하지 않으면 0 != 1 즉 조건문이 true가 되고 break가 실행되는 것입니다.
아래 링크를 보면 같은 질문에 대한 자세한 답변이 나와 있는데, 참고하시면 좋을 것 같습니다.
답변이 되었길 바랍니다.
감사합니다.
https://stackoverflow.com/questions/30065675/what-does-scanf-nc-mean
Export template 안됨
1
65
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
98
3
main 함수에서 왜 int만 선언이 되는걸까요
1
85
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
82
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
81
1
프로토타입과 함수간의 인자 불일치
1
87
2
12.12 헤더 관련 질문
1
74
2
Visual Studio Community 2026 사용 문의
1
172
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
73
2
getchar(), putchar()
1
112
3
강의자리ㅛ
1
93
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
131
2
소스파일안에 여러 파일
1
89
2
F5와 F7의 차이
1
93
2
c = TWO * (a+b); 에서 a와 b는?
1
69
2
; 세미콜론을 붙이는 기준에 문의
1
78
1
Step over 기능 문의
1
66
2
2.6 강의 따옴표 출력 규칙 문의
1
88
2
int main 함수 관련 오류 문의
1
82
2
13.4 words[0]
0
73
2
11.7 함수를 구현해 봤습니다.
1
67
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
73
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
62
2
11.6 fit_str함수를 구현해 봤습니다.
1
60
2





