2013-07-18 7 views
4

Im 초보자 C 프로그래밍 언어를 배우고 Microsoft Visual C++를 사용하여 코드를 작성하고 테스트합니다. 눌러 키보드로 모든 시간을 입력getchar 및 putchar에 의해 여러 줄 인쇄

#include <stdio.h> 
int main(void) 
{ int c; 
    while ((c = getchar()) != EOF) 
     putchar(c); 
    return 0;} 

프로그램의 인쇄 문자 입력 : 텍스트 (섹션 1.5.1)에서 C에서 프로그램 아래

는 putchar를 통해 출력()와 getchar가()를 입력을 복사합니다. 결과적으로 인쇄하기 전에 한 줄만 입력 할 수 있습니다. 인쇄하기 전에 키보드로 여러 줄 텍스트를 입력하는 방법을 찾을 수 없습니다.

이 프로그램에서 키보드의 멀티 라인 텍스트를 입력하고 출력 할 수있는 방법이 있습니까?

죄송합니다. 기본적이고 무지한 질문입니다.

미리 감사드립니다.

+0

fgets를 사용하여 입력 행을 읽은 다음 strcat를 사용하여 입력 행을 연결하십시오. – suspectus

+0

창에서 alt + 10을 눌러 개행 문자를 입력 할 수 있습니다. –

+0

출력 타이밍? – BLUEPIXY

답변

1

) 지금 '+'에 이러한 조건을 두지 :

#include <stdio.h> /* this is for printf and fgets */ 
#include <string.h> /* this is for strcpy and strlen */ 
#define SIZE 255 /* using something like SIZE is nicer than just magic numbers */ 

int main() 
{ 
    char input_buffer[SIZE];  /* this will take user input */ 
    char output_buffer[SIZE * 4]; /* as we will be storing multiple lines let's make this big enough */ 

    int offset = 0; /* we will be storing the input at different offsets in the output buffer */ 

    /* NULL is for error checking, if user enters only a new line, input is terminated */ 
    while(fgets(input_buffer, SIZE, stdin) != NULL && input_buffer[0] != '\n') 
    { 
     strcpy(output_buffer + offset, input_buffer); /* copy input at offset into output */ 
     offset += strlen(input_buffer);    /* advance the offset by the length of the string */ 
    } 

    printf("%s", output_buffer); /* print our input */ 

    return 0; 
} 

그리고 이것은 내가 그것을 사용하는 방법입니다

,210

모든

: 다시 parroted되어 나는 fgets, strcpystrlen을 사용했습니다. 그것들은 매우 유용한 기능이므로 봐주세요. (사용자 입력을 위해 권장되는 방법은 fgets입니다).

+0

Linux에서 프로그램을 실행 했습니까? 프로그래밍을 위해 Windows 대신 Linux를 사용해야하는 것 같습니다. – user2593692

+0

예, Linux에서 실행되었지만 Windows에서 실행할 수없는 이유는 없습니다. 나는 특별한 헤더 나 커스텀 OS 동작을 사용하지 않았다. 그러나 그렇지 않다면 가장 유명한 컴파일러 GCC가 C99 표준을 지원하는 C 프로그래밍 용 리눅스를 사용할 것을 권장한다. VC++는 C90 만 구현하고 최신 C 표준을 지원할 계획이 없습니다. 그리고 이것은 개인적인 견해입니다. 그러나 여러분의 가정은 리눅스가 C를 위해서가 아니라 프로그래밍을 더 쉽게한다는 점에서 옳은 것입니다. – Nobilis

+0

확인한 후에, 프로그램은 창문 아래 잘 실행됩니다.) 따뜻한 도움에 감사드립니다. – user2593692

0

'+'를 입력하고 Enter 키를 누르면 입력 한 모든 데이터가 인쇄됩니다. 당신은 내가 가지고 (이 문자 배열에 저장되지 않도록 사용자가 인쇄 작업을 표현하고 싶은 당신은 '+'문자 또는 어떤 캐릭터에 조건을 둘 수 100 개

#include <stdio.h> 
    int main(void) 
    { int c='\0'; 
     char ch[100]; 
     int i=0; 
     while (c != EOF){ 
      c = getchar(); 
      ch[i]=c; 
     i++; 

      if(c=='+'){ 

      for(int j=0;j<i;j++){ 
       printf("%c",ch[j]); 
      } 
     } 
    } 
     return 0; 


    } 

다음 배열의 크기를 증가시킬 수있다 포인터 연산의 일부 영리한 사용은 당신이 원하는 것을 할

-1

Enter 키를 누를 때 Shift 키가 눌러져 있는지 GetKeyState 함수를 사용하여 확인할 수 있습니까? SHIFT/ENTER를 사용하여 여러 줄을 입력하고 일반 ENTER 키를 사용하여 전체를 보낼 수있었습니다. 뭔가 같이 :

#include <stdio.h> 
int main(void) 
{ int c; 
    while (true){ 
     c = getChar(); 
     if (c == EOF && GetKeyState(VK_LSHIFT) { 
       putchar("\n"); 
       continue; 
     else if(c == EOF) break; 
     else { 
       putchar(c); 
    } 
} 
+0

코드가 컴파일되지 않습니다. –

0

사용 setbuffer()은 (버퍼의 크기까지) stdout 완전 버퍼를 확인합니다.

#include <stdio.h> 
#define BUFSIZE 8192 
#define LINES 3 
char buf[BUFSIZE]; 
int main(void) 
{ int c; 
    int lines = 0; 
    setbuffer(stdout, buf, sizeof(buf)); 
    while ((c = getchar()) != EOF) { 
     lines += (c == '\n'); 
     putchar(c); 
     if (lines == LINES) { 
       fflush(stdout); 
       lines = 0; 
     }} 
    return 0;}