강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

알고리즘 교안 질문

작성

·

326

0

p.22 입력이 계속해서 이어질때

1안)

 문자를 입력했을 때 1이라는 문자열이 줄바꿈이 되면서 계속 출력됩니다.

2안)

 문자를 한번 입력하고 바로 프로그램이 끝납니다.

 

두 안에 대해 위와같은 차이를 보이는데 정상인가요?

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

1. scanf로 할 때와 cin으로 할 때 맞으신가요?

2. 문자를 넣으셨다는데 int형으로 선언을 한 것이기 때문에 숫자를 넣어야 하는데 숫자를 넣으신거 맞나요?

3. 스샷 부탁드립니다.

 

감사합니다.

강사 큰돌 올림.

감사합니다 선생님. 조언주신대로 문자를 입력하지 말고 숫자를 입력하니 원하는 결과가 잘 나왔습니다.

하지만, 문자(예: 'a')또한 아스키코드 정수값이라서 괜찮을 것이라 생각했는데, 1안 과 2안 모두 예상과는 다른 결과를 보이고 있습니다. 왜 이런 결과를 보이는지 궁금합니다.

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요. ㅎㅎ

아스키코드는 문자로 받았고 그 이후 숫자로 변환했을 때 아스키코드가 출력이 되는 겁니다. 

자, 예를 들어 

 

#include <bits/stdc++.h>

int a; 

using namespace std; 

int main() {  

cin >> a; 

cout << a << '\n';

    return 0;

 

}

다음과 같은 코드에서 a를 입력하면 0이 됩니다.  이는 잘못된 입력값 때문입니다. 

C++의 경우 입력에 대한 부분이 잘못되었다고 판단되면 값에 0을 쓰고 오류 비트를 설정합니다. 추출 결과 값이 너무 크거나 작아서 값을 유지할 수 없으면 std::numeric_limits::max() 또는 std::numeric_limits::min()이 기록되고 오류 비트 플래그가 설정됩니다. (C++11이상부터 이렇게 됩니다.)

 

감사합니다.

큰돌 올림.

답변 감사합니다!

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

질문하기