2012-01-29 5 views
0

제 질문은 OOP 언어에서는 간단하지만 언어 C에서는 간단하지 않습니다. 사용자가 콘솔에 텍스트 데이터를 입력하고 예제 ESC에 대해 문자 종료를 설정하면 (텍스트 데이터는 여러 줄로 표시되며 끝 문자는 언제 알 수 없습니다).텍스트의 종료 문자

그래서 내 질문은 콘솔에서 텍스트를 읽는 방법이고 사용자가 esc를 눌러 텍스트 데이터를 읽는 루프를 깨는 방법입니까? 여기

일부 코드 :

printf("Enter the source here(press ESC) : \n"); 
char buffer[1000][1000]; 
int counter = 0; 
while(1) 
{ 
    if (fgets(buffer[counter],sizeof(buffer[counter]),stdin)) 
    { 
     counter++; 
    } 

} 
+0

'fgets' 함수의 결과를 저장 한 다음 조건문을 사용하여 이스케이프 문자를 확인하십시오. –

+0

@Cody - 작동하지 않을 것입니다. OP는 ESC를 누르 자마자 종료하려고합니다. –

+0

왜 "OOP 언어에서는 간단합니까?" OOP는 무엇을해야합니까? 말하자면, C++에서 어떤 마법적인 방법으로 이것을 할 수 있습니까? C에서 그렇게하는 것과 근본적으로 다릅니다. – jamesdlin

답변

1

여러 줄의 텍스트를 읽는 적절한 방법은 EOF 문자로 입력을 종료하는 것입니다. Windows에서 나는 ctrl + Z (유능한 시스템)에서 Ctrl + D라고 생각합니다. C의 많은 입력 함수는이를 자동으로 종결 자 (예 : scanf 및 gets)로 인식하거나 문자로 문자를 읽고 명시 적으로 입력 문자를 읽을 수 있습니다.

2

가장 쉬운 방법은 C 또는 Z-C-D를 presing하여 "파일 끝"하도록 사용자에게 요구하는 것이다. 또한 : 입력은 일반적으로 조리하기 때문에

#define ESC 27 /* But not always. */ 

int ch; 
while ((ch = getc(stdin))) { 
    if (ch == ESC) 
     break; 

    /* ... */ 
} 

, 그것은 더 열심히 당신이 생각하는 감사의 : 사용자가 탈출을 누른 후 물건을 입력 유지할 수 있습니다.

이 경우 ncurses를 사용할 수 있습니다. 그렇다면 C-d를 누르는 것이 잘못된 것입니까?

0

getchar()을 사용하여 수동으로 단일 문자를 가져올 수 있습니다. 문자가 ESC인지 확인하는 루프에서이를 사용하십시오. 그러나 더 큰 것을 작성한다면 pdcurses과 같은 전용 라이브러리를 사용하는 것이 좋습니다.

0

저는 콘솔에서 많은 양의 데이터를 읽을 필요가 없다고 생각합니다. 어쩌면 파일에 데이터를 넣고 파일에서 읽는 것을 고려해보십시오.

관련 문제