2016-10-10 6 views
-1

개행이 발생할 때까지 문자를 읽으려면 C로 함수를 작성하고 싶습니다.C : scanf와 getchar의 동작 차이점

코드 사용 scanf와 : while(scanf("%c",&x)!=EOF&&x!='\n'){....}

코드 사용 getchar가 : while(((x=getchar())!=EOF)&&x!='\n'){....}

INT의 x는 함수 내에서 선언 된 지역 변수이다 나는 scanf와와 getchar가를 사용하여 다음 코드를 썼다. 두 번째 코드는 단어 (EG : "ADAM \ n")를 읽은 후 중지되지만 scanf 코드는 루프를 중단하지 않고 대기 상태를 유지합니다.

나중에 scanf 이후에 x 값은 (2^7-1) * (2^8) + 문자 읽기의 ASCII 값 (= 32522 개행)이며 문자 상수 \ n은 10임을 알 수 있습니다. 비교가 실패했습니다.

제 질문은 getchar가 '\ n'을 읽은 후 x 값을 32000 이상으로 지정하는 반면 getchar은 값 10 (문자 상수 '\ n'과 일치 함)을 할당하는 이유입니다. 모든 "공간"문자를 정수를 읽고 무시 예를 scanf("%d",&num)를 들어, (뿐만 아니라 char) 다른 데이터 유형을 읽는 데 사용되는

1) 일반적으로 scanf에 : 여기

+1

'scanf ("% c", & x) == EOF'는 심각한가요? –

+0

죄송합니다. 그건 실수 였어. 나는 그 라인 @SouravGhosh을 수정했다 – user3763284

+0

무엇으로 수정 되었는가? scanf()의 반환 값은 중요합니다. –

답변

0

의 주요 차이점은 scanf 행동에 (문자는 ''(공백), \ t '(탭) 및'\ n '(줄 바꿈)).

2) scanf("%c",&x)scanf("%d",&num) (숫자를 입력 한 경우)은 1 - 성공적으로 읽은 데이터의 수를 stdin에서 반환합니다. 참고 : scanf("%d",&num)은 숫자가 stdin 인 경우 0을 반환합니다.

0

가장 큰 차이점은 getf가 입력 스트림에서 공백 문자를 건너 뛰는 반면 getchar는이를 반환한다는 것입니다. 따라서 scanf로 입력에 개행 문자를 볼 수 없습니다. 또한 scanf의 반환 값은 성공적인 변환 된 변수의 개수입니다.

변수에 유효한 값 (more details here)이 포함되어 있는지 확인하려면 scanf(...) == 1을 확인해야합니다. scanf가 모든 입력 변수를 변환하지 않으면 변환되지 않은 변수의 값은 정의되지 않습니다. 이것이 귀하의 경우에 x의 이상한 가치를 보는 이유입니다. 이것은 컴파일러가 이전에 사용 된 메모리 위치에 x를 할당 했음에도 불구하고 약간의 남은 데이터를 포함하기 때문에 다소 (임의 또는 다소) 무작위 값입니다.