2016-08-12 4 views
0

간단한 메모장과 유사한 프로그램을 만들어 명령 프롬프트에 입력하려고합니다. 그러나 scanf() 함수를 사용하여 "Enter"키를 눌러 다음 줄로 정확하게 갈 수는 없습니다.scanf를 사용하여 개행 기호를 얻는 방법은 무엇입니까?

#include<stdio.h> 
void main() 
{ 
char c; 
for(;;){ 
     scanf("%c", &c); 
    if(c == "\n"){ 
     printf("\n"); 
     } 
    else{ 
     printf("%c", c); 
     } 
} 
} 

(내가는 scanf()는 버퍼의 새로운 문자 잎 알고있다. 나는 (scanf와보다 후에 사용 getch(). 기능 문제를 제거하기 위해 최선을 시도했다) 그러나 나는 그것이 작동 할 수 없습니다 . 문자열이나 다른 것을 사용하는 것과 같은 대안을 피하기 위해 scanf() 함수로이 문제를 이해해야한다.)

+4

' "\ n"'문자열 (하나 개의 문자를 포함하는)한다, ''\ n'' 당신은 당신의 컴파일러 din't는 경고, 또는 당신이를 무시하기로 결정했습니다 말을 의미 – immibis

+3

문자인가? 나에게 뭔가를 말하면서 나타나서 질문을 작성하고 게시하고 _answers_를 기다리며 정말 재미 있지 않습니까? –

+0

'scanf'가하는 일을 오해하고있는 것처럼 보입니다. 버퍼에서 추출한 문자는 그대로 두지 않습니다. 그 목적은 무엇입니까? –

답변

4

글쎄, 너는 약간 불행이다. 이것은 C 프로그래밍의 시작에서 인기있는 문제입니다. C에는 '\n'"n" 사이에는 큰 차이가 있습니다. 첫 번째 문자는 단일 문자이므로 '\n'의 형식은 char입니다. 다른 하나는 문자열이고 C의 문자열은 char[]입니다. 문자열로서 실제로 "\n" = ['\n', '\0']'\0'으로 끝나며 C에 있음을 의미합니다.

또 다른 것은, scanf은 앞에 오는 흰색 기호를 무시하고 새 줄은 흰색 기호입니다. 더 많은 문자를 사용하려면 fgets을 대신 사용하십시오. single characted를 읽으려면 scanf는 여전히 괜찮습니다.

이것은 스택 오버플로 주제 인 this에서 널리 설명되었습니다.

#include<stdio.h> 
void main() { 
    char c; 
    for(;;){ 
     scanf("%c", &c); 
     if(c == '\n'){ 
      printf("\n"); 
     } else{ 
      printf("%c", c); 
     } 
    } 
} 
+2

' "% c"'형식의 경우'scanf'는 공백을 건너 뛰지 않습니다. –

+0

@JoachimPileborg이 (가) 편집했습니다. – xenteros

+0

음, 아직도 내 PC에서 작동하지 않습니다. 확인해 봤어? –

관련 문제