int main(){
char c;
scanf("%c", &c);
printf("%d\n", c);
}
사용자가 71
을 입력하고 Enter 키를 누릅니다.2 자리 숫자의 Scanf 값은?
c
이 71
이되는 이유는 무엇이며, 이 아닌 1
만 읽는 이유는 무엇입니까?
int main(){
char c;
scanf("%c", &c);
printf("%d\n", c);
}
사용자가 71
을 입력하고 Enter 키를 누릅니다.2 자리 숫자의 Scanf 값은?
c
이 71
이되는 이유는 무엇이며, 이 아닌 1
만 읽는 이유는 무엇입니까?
몇 가지 주요 차이점이 누락 된 것 같습니다.
scanf
함수는 입력 문자열을받습니다. 예 : '7'로
\0
)입니다.(단순화를 위해 ASCII로 가정합니다. 다른 인코딩을 사용할 수 있습니다.)
인쇄 가능한 문자는 인쇄 할 때 문자, 숫자 또는 기호로 화면에 나타납니다. 제어 문자는 터미널/디스플레이 장치가하는 것을 제어합니다 (줄 바꿈으로 개념적 커서를 다음 줄로 이동시키고 bel는 일부 터미널에서 신호음을냅니다).scanf
입력 문자의 문자열로 무엇을
은 형식 문자열에 의해 제어됩니다
%c
는 char
값으로 변환없이 들어오는 문자를 를 읽습니다.
%d
은 '0'.. '9'(즉, 0x30..0x39 값) 범위의 문자 시퀀스를 정수로 변환합니다. 문자가 '7'%c
인 문자로 스캔 될 때
그래서,이 값 0x37 (55 진수) 여전히 가정 ASCII을 준다. 당신이 문자열 "71"를 스캔하려면 같은 문자가 %d
와 정수로 스캔하면 정수 값으로, 정말 어떤 이유로 당신을 위해 %d
(또는 %hhd
경우를 사용, 값 7
소요 그것을 char에 저장하고 싶다).
이제 마지막으로, 우리는이 댓글 해결할 수 있습니다 : 나는 5 자리의 정수를 스캔 할 수있는 방법, 정수는 4 바이트 인 경우 ...
를?
그런 다음 그 5 비 NUL 바이트가 기본-10로 변환됩니다, %d
이것을 스캔하는 경우의이
const char literal[6] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x00};
로 메모리에 저장됩니다 리터럴 문자열 "12345"를 생각해 보자 정수를 12345로 변경하십시오.
그러나 동일한 문자열을 %5c
으로 스캔하면 {0x31, 0x32, 0x33, 0x34, 0x35}
값을 갖는 5 자 버퍼가 채워집니다. 일반 %c
을 사용하면 0x31이라는 첫 번째 문자 만 읽습니다.
'7'은 문자이고 '1'은 문자입니다. 문자 'G'는 71 형 'G'의 진수 값을 가지고 있으며, 당신은 당신이 할 수있는 번호를 검색 할 경우에 당신은 (71)를 얻을 수 있습니다 :
int i;
scanf("%d", &i);
printf("Value %d = char(%c)", i, (char)i);
'7'을 scanf와 시스템되면 기다리고 있던 하나의 캐릭터가 있었고 청취를 멈췄습니다. 당신의 '1'은 아직 "스캔"되지 않았습니다!
scanf ("%c", &c);
수단 문 「표준 입력 한 바이트를 읽어 가변 c
넣 ". 변환이 수행되지 않습니다. 예제에서 바이트는 '7'
입니다. ASCII (또는 UTF-8 같은 수퍼 집합) 문자 인코딩을 사용하는 로켈에서 프로그램이 실행된다고 가정하면 '\x37'
또는 55
과 같습니다. c
에 할당 된 값은 현재 로켈에서 사용하는 문자 인코딩에 따라 달라집니다. 비교함으로써
성명 등
scanf ("%d", &i);
는 표준 입력 십진수를 나타내는 하나 이상의 문자 읽어 정수 값에 해당 진수로 변환하고, 변수에 그 값을 저장 "을 의미 i
". 변수 i
에 할당 된 값은 현재 로케일에서 사용하는 문자 인코딩에 의존하지 않습니다. 단, 표준 입력은 프로그램에서 예상하는 인코딩을 사용합니다.
'char '이 무엇인지 아십니까? 단일 변수는 어떻게 두 개의 값을 가질 수 있습니까? –
@EugeneSh., 예 a 문자 – Onedayanam
그리고 두 개의 문자를 어떻게 포함 할 수 있습니까? –