2012-01-29 142 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'函数的结果,然后使用条件语句来检查转义字符。 – 2012-01-29 11:33:07

+0

@Cody - 这将不起作用,OP希望它在ESC按下时立即终止 – 2012-01-29 11:37:43

+0

为什么它“在OOP语言中很简单”。 OOP与它有什么关系?用什么神奇的方式来做这件事,比如C++,它与你在C中的做法有着根本的区别? – jamesdlin 2012-01-29 13:18:56

回答

1

我觉得阅读多行文本的正确方法是用一个EOF字符终止输入。在Windows中,我认为它是ctrl + Z(我不确定),在类似unix的系统上,它是ctrl + D。 C中的许多输入函数会自动将其识别为终结符(例如scanf和gets),或者您可以逐字符读取并明确输入字符。

2

最简单的方法是要求用户 “结束文件”,由presing C-Z或C-d。或者:

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

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

    /* ... */ 
} 

由于输入通常是熟的,它很难谢谢您认为:用户可以继续按逃逸后进入的东西。

此使用的ncurses可替代。那么,再次按下C-d有什么问题?

0

可以手动获取使用getchar()单个字符 - 使用在一个循环来检查,如果该字符是ESC。但是,如果您要编写更大的文件,最好使用专用库如pdcurses

0

我觉得你并不真的需要从控制台读取多达那么多的数据。也许尝试考虑将数据放入一个文件然后从文件中读取它。