728x90
오류
간단한 예제를 풀던 중 오류가 발생하여 찾아보았다.
scanf(%d,&a)에 문자를 입력했더니, 무한으로 출력이 되는것이었다.
해당 문제가 발생한 예제는 아래 예제이다.
// 반복문 사용해서 User에게 아무숫자나 입력받기
// 그 숫자가 홀수인지 짝수인지 구별해서 출력하는 프로그램 만들기.
#include <iostream>
#include <stdio.h>
//반복문 사용해서 User에게 아무숫자나 입력받기
// 그 숫자가 홀수인지 짝수인지 구별해서 출력하는 프로그램 만들기.
int check(int userInput);
int main(){
int userInput = 1;
while(1){
printf("아무숫자나 입력하세요. 홀짝 구분해드릴께요.");
scanf("%d",&userInput);
if(userInput == 'q' || userInput == 'Q'){
return 0;
}
check(userInput);
}
} // main
int check(int userInput){
int userInput2 = userInput;
int output;
output = userInput % 2;
if(output == 1){
printf("홀수입니다.\n");
}else if(output == 0){
if(userInput2 ==0){
printf("0입니다.\n");
}else{
printf("짝수입니다.\n");
}
}else {
printf("다시입력하세요\n");
}
return 0;
}
해결방법
검색을 해보니, scanf(%d,&a)에서
%d는 우리가 알듯이 정수형 타입을 변수에 받아서 입력을 하겠다는 의미이다.
그런데 문자를 입력할 경우,
나는 아스키 코드로 입력이 될 줄 알았는데 그것이 아니었다.
문자를 입력할 경우, 정수형이 아니기때문에 입력자체를 받지 않는다는 것이었다.
입력을 받지 않으면 기존 &a의 변수 a에 들어가있는 쓰레기값이 그대로 남아있기 때문에(즉, 초기화되지 않았기 때문에)
계산식이 정확히 이루어 지지 않아서 무한으로 출력이 이루어지는것이었다.
다음은 해결코드이다.
scanf("%d",&userInput);
scanf("%c",&userInputChar);
이런식으로 scanf를 연속으로 받게되면
A라는 문자를 넣었을때
1) scanf("%d", &userInput);은 건너뛰게 된다.
2) scanf("%c", &userInputChar);에는 입력이 되게 되어 해당 변수를 이용하여 해결하였다.
참고로 한글은 2byte이다.
#include <iostream>
#include <stdio.h>
//반복문 사용해서 User에게 아무숫자나 입력받기
// 그 숫자가 홀수인지 짝수인지 구별해서 출력하는 프로그램 만들기.
int check(int userInput);
int main(){
int userInput = 1; // 숫자를 위한 변수
char userInputChar; //문자를 위한 변수
while(1){
printf("아무숫자나 입력하세요. 홀짝 구분해드릴께요.\n (나가고 싶다면 Q를 입력하세요)\n");
scanf("%d",&userInput); //숫자를 입력했을 경우 입력 저장주소
scanf("%c",&userInputChar); //문자를 입력했을 경우 입력 저장주소
//탈출 조건 q,Q누르면 탈출
if(userInputChar == 'q' || userInputChar == 'Q'){
return 0;
}
check(userInput);
}
} // main
//홀짝 체크 함수
int check(int userInput){
int userInput2 = userInput;
int output;
output = userInput % 2; // 나머지로 홀,짝 판별
if(output == 1){
printf("홀수입니다.\n");
}else if(output == 0){
if(userInput2 ==0){
printf("0입니다.\n");
}else{
printf("짝수입니다.\n");
}
}else {
printf("다시입력하세요\n");
}
return 0;
}
728x90
'프로그래밍 > C,C++' 카테고리의 다른 글
[오류_C/C++] MAC에서 system("cls")를 사용하고싶다면? (0) | 2023.06.02 |
---|---|
예제) 크리티컬 확률과 몬스터 사냥하기 feat 줄 정렬 (0) | 2023.06.02 |
[C/C++] 자료형, byte, 아스키코드 (0) | 2023.06.02 |
C 연습 예제(정수, 데이터타입, if, while) (0) | 2023.06.01 |
[예제] 삼항연산자를 이용한 가위바위보 (0) | 2023.05.31 |