조건문에 c == 'a' 대신에, c == 'a' | 'A' 를 하면 에러가 발생합니다
358
작성한 질문수 8
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int printfMenu() {
printf("Enter the letter of your choice:\n");
printf("a. avengers ");
printf("b. beep\n");
printf("c. count ");
printf("d. quit\n");
}
int selectA() {
printf("Avengers assemble!\n");
}
int selectB() {
printf("\a");
}
int selectC(){
int n;
printf("Enter an integer:\n");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("%d\n", i);
}
}
int clearBuffer() {
while (getchar() != '\n')
continue;
}
int main() {
char c;
while (1) {
printfMenu();
c = getchar();
printf("%c", c);
if (c == 'a'|'A') {
selectA();
}
else if (c == 'b'|'B') {
selectB();
} else if (c == 'c'|'C') {
selectC();
}
else if (c == 'd'|'D') {
break;
}
else {
printf("Wrong input. try again.\n");
}
clearBuffer();
}
return 0;
}강의 전에 혼자 만들어본 코드인데요.
그 전에는 모든게 정상작동되었는데,
기존의 " if(c == 소문자알파벳)" 에서
" if(c == 소문자 | 대문자 )"
로 변경하면 scanf에 무엇을 입력하던지
if (c == 'a'|'A') 가 true가 되어 실행됩니다. c에 입력이 잘못들어가는지 F10으로 확인해보려고
printf("%c", c); 코드도 추가해서 찍어봤는데,
c = 'B' 처럼 변수에 제대로 저장되어도,
조건문 if (c == 'a' | 'A')가 실행되네요. 제가 무엇을 잘못한건가요?? 어떻게 고칠수 있을까요 ?? 답변 부탁드리겠습니다 !
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
우선, 궁금하신 부분의 전체 코드 를 넣어주셔서 너무 감사드려요!
교수님께서도 [인프런 질문에서 답 잘 받으시는 요령] 에서 말씀해주셨듯이 이렇게 질문을 올려주시면,
저도 질문자님이 궁금하신 것이 무엇인지 더 잘 파악하게 되고, 질문자님께서도 더 만족스러운 답변을 얻으실 수 있게 되는 것 같아요. 진심으로 감사드립니다.
논리 연산자에 있어서 혼동이 있으신 것 같습니다.
질문자님의 코드에서 다음 부분을 발췌해보겠습니다.
if (c == 'a'|'A') { selectA(); } else if (c == 'b'|'B') { selectB(); } else if (c == 'c'|'C') { selectC(); } else if (c == 'd'|'D') { break; } else { printf("Wrong input. try again.\n"); }해당 부분에서 질문자님께서는
(a == 'a' | 'A')와 같이|연산자를 사용하셨는데요,C언어에서 이는 비트 단위 논리 연산자 중 하나로서, 추후 15. 비트다루기 섹션에서 자세하게 학습하시게 됩니다.
코드의 의도에 맞는 논리 연산자는
||인데요, 이는 7.7 논리 연산자 Logical operators 강의를 복습해보시면 좋을 것 같습니다.
답변을 드리면서 고민을 해보았는데요, 더 자세히 설명을 드려보고 싶었지만, 지금 당장 질문자님께 비트 단위 논리 연산자와 정규 논리 연산자의 차이점 등을 모두 설명 드리기에는 내용도 방대하기도 하지만, 무엇보다 추후 다시 15. 비트다루기 섹션을 공부하시면서 훌륭한 교수님의 설명으로 더 잘 이해하실 것 같기도하고, 지금은 질문자님께서 약간의 혼동으로 오타 혹은 실수를 하신 것 같기에 문제의 원인을 알려드리는 수준에서 설명은 마무리하도록 하겠습니다.
그럼에도 불구하고, 예시로 힌트를 드려보자면,
if (c == 'a' || c == 'A') {
selectA();
} else if (c == 'b' || c == 'B') {
selectB();
} else if (c == 'c' || c == 'C') {
selectC();
} else if (c == 'd' || c == 'D') {
break;
} else {
printf("Wrong input. try again.\n");
}위 코드와 질문자님의 코드를 비교해서 공부해보세요!
정말 답변드리기 좋게 질문을 남겨주신 점, 다시 한번 진심으로 감사드려요!!
이해가 충분히 되셨기를 바라며, 혹시 또 궁금하신 점이 있으시다면 편하게 댓글 남겨주시면 감사하겠습니다.
감사합니다. 화이팅하세요!
1
자세한 답글 감사합니다 !
|대신 ||를 써야되는건 이제 이해하였는데,
사실 아직도 왜 c = 'B'일때
c = 'a' | 'A'가 true인지는 모르겠지만, 일단 15챕터를 듣고도 이해가 안된다면 다시 질문드릴게요 !
감사합니다 !
Export template 안됨
1
45
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
70
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
58
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
63
2
Visual Studio Community 2026 사용 문의
1
149
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
96
3
강의자리ㅛ
1
85
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
119
2
소스파일안에 여러 파일
1
80
2
F5와 F7의 차이
1
82
2
c = TWO * (a+b); 에서 a와 b는?
1
63
2
; 세미콜론을 붙이는 기준에 문의
1
72
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
81
2
int main 함수 관련 오류 문의
1
71
2
13.4 words[0]
0
64
2
11.7 함수를 구현해 봤습니다.
1
65
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
67
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
57
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





