2014-11-03 2 views
0

문자 배열을 사용하지 않고 사용자가 입력 한 내용을 인쇄 할 수 있습니까?문자 배열을 사용하지 않고 입력 내용을 인쇄하십시오.

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

예를 들어, 내가 입력합니다 :

이 코드는 입력 한 문자가 포함 된 경우 작동하지 않습니다

abcd 
efgh 
ij 

을 나는 출력이 동일 할 :

abcd 
efgh 
ij 

하지만 첫 번째 줄을 입력하면 프로그램에서 그 줄을 출력해야합니다 (내 입력 후). 그리고는 다음과 같이이다 : 재미에 대한

abcd (my input) 
abcd (output) 
efgh (my input) 
efgh (output) 
ij (my input) 
ij (output) 
+6

주어진 조건에서 예상되는 출력을 얻지 못할 수도 있습니다! – haccks

+0

haccks는 알고리즘을 다시 생각해보아야한다고 말했습니다. –

+0

요구 사항을 명확히 할 수 있습니까? '입력 3 줄 입력'이라고 말하면 프로그램을 실행하고 표준 입력에 3 줄을 입력한다는 의미입니까? 그리고 프로그램에서 데이터를 반향 시키길 원하지만, 데이터 사본 하나만 보거나 데이터 복사본 두 개를 보거나 한 번에 하나씩 보거나 인터리브 된 입력을보고 싶습니까? 출력 라인? 입력이 키보드에서 입력되는 대신 파일에서 리디렉션되는 경우 어떻게 할 것입니까? 유닉스 계열의 컴퓨터, 윈도우, 또는 다른 것 (일부 제안은 POSIX가 필요할 수 있기 때문에)인가? –

답변

1
#include<stdio.h> 

int main(){ 
    FILE *fp = fopen("echo.tmp", "w+"); 
    int ch; 
    while((ch = getchar()) != EOF){ 
     fputc(ch, fp); 
    } 
    fflush(fp); 
    rewind(fp); 
    while((ch = fgetc(fp)) != EOF){ 
     putchar(ch); 
    } 
    fclose(fp); 
    remove("echo.tmp"); 
    return 0; 
} 
1

, 불가능 재귀 솔루션입니다.

char을 읽은 다음 스택에 놓고 다시 실행하십시오.

완료되면 (EOF) 스택을 통해 반복됩니다.

#include <stdio.h> 

typedef struct prev_T { 
    struct prev_T *prev; 
    int ch; 
} prev_T; 

void put1(prev_T *s) { 
    if (s != NULL) { 
    // Swap this line and the next if you want to print in reverse. 
    put1(s->prev); 
    putc(s->ch, stdout); 
    } 
} 

void get1(prev_T *s) { 
    prev_T node; 
    node.ch = getchar(); 
    if (node.ch == EOF) { 
    put1(s); 
    } else { 
    node.prev = s; 
    get1(&node); 
    } 
} 

    int main(void) { 
    get1(NULL); 
    return 0; 
    } 
0

이보다 더 실용적 재귀 솔루션 :

#include <stdio.h> 
#include <stdarg.h> 

void unwind(va_list ap) 
{ 
    int ch = va_arg(ap, int); 
    if (ch == EOF) 
     return; 

    va_list a2 = va_arg(ap, va_list); 
    va_end(ap); 
    unwind(a2); 
    putchar(ch); 
} 

void package(int dummy, ...) 
{ 
    va_list ap; 
    va_start(ap, dummy); 

    int ch = getchar(); 
    if (ch == EOF) 
     unwind(ap); 
    else 
     package(0, ch, ap); 
} 

int main() 
{ 
    package(0, EOF); 
} 
+0

'dummy'를 입력 매개 변수의 일종으로 만들 수도 있습니다. 최대 길이 –

0

당신이주는 입력에서 의도 한 결과를 달성하기 위해 간단하고 비 재귀, 매우 실용적인 방법은 개별 문자 및 즉시 출력을 읽을 것입니다 특수 문자를 특수 처리합니다. 예를 들어, Enter 키를 누를 때 개행 문자를 출력하도록 문자 값 13을 테스트하고, 입력의 끝을 신호하기 위해 다른 특수 문자를 찾아 볼 수 있습니다.

관련 문제