2014-01-12 2 views
0

그래서 C 나 자신을 가르치고 ++와 내가 잘못 여기에 무엇을 볼 수 없습니다 두 배로 :코드 출력이

코드 :

// Arrays.cpp : Defines the entry point for the console application. 

#include "stdafx.h" 
#include <iostream> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int i = 0; 
    char input = ' '; 

    for(i = 1; i <= 100; ++i) 
    { 
     std::cout << "enter a value for element number " << i << ": " ; 
     do 
     { 
      input = std::cin.get(); 
      std::cout << "recorded element in position " << i << " is " << input << "\n"; 
     } while (!input == 'q') ; 
    } 
} 

문제 :

라인 17 : 입력 std::cin.get();

그것은 내게 이것을 준다 : recorded element in position
2

소자의 수에 대한 값을 입력이다 5 recorded element in position 1
소자 번호 (2)에 대한 값을 입력 5 : IT와 기록 자동

소자의 숫자 값을 입력 저 소자 (2)를 완성 3 :

하지만 std::cin >> input으로 바꾸면 왜 안 되죠?

답변

4

이 (가)에 입력 된 것처럼 보입니다. 반환 키를 사용하면 std::cin.get()에서 가져온 다른 문자 ('\n')가 나타납니다. 구성원 std::istream::get()은 형식을 지정하지 않는 입력 함수로, 읽으려고하면 무엇이든 읽으려고하기 전에 공백을 건너 뜁니다.

반면 형식이 지정된 입력 (예 : std::cin >> input)을 사용하는 경우 스트림은 무언가를 읽으려고 시도하기 전에 선행 공백을 모두 건너 뜁니다. 즉, 입력 한 개행 문자는 건너 뜁니다.

(std::cin >> std::ws).get()을 사용하면 get()을 사용하기 전에 선행 공백을 사용할 수 있습니다. ... 그리고 다른 방법으로는, std::cin >> std::noskipws을 사용하여 형식화 된 입력에 대해 자동으로 선행 공백을 건너 뛰지 않고 스트림을 설정할 수 있습니다 (그리고 std::cin >> std::skipws을 사용하여이 설정을 다시 반대로). 그러나 일반적으로 형식화 된 입력에 대해 선행 공백을 건너 뛰지 않는 것이 좋습니다.

관련 문제