我的问题在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 :(得分:2)
最简单的方法是要求用户通过预设C-z或C-d来“结束文件”。可替换地:
#define ESC 27 /* But not always. */
int ch;
while ((ch = getc(stdin))) {
if (ch == ESC)
break;
/* ... */
}
由于输入通常是煮熟的,所以更难以理解:用户可以在按下退出后继续输入内容。
使用ncurses可以替代它。再说一次,按下C-d会出现什么问题?
答案 1 :(得分:1)
我认为读取多行文本的正确方法是使用EOF字符终止输入。在Windows中我认为它是ctrl + Z(我不确定),在类Unix系统上它是ctrl + D. C中的许多输入函数会自动将其识别为终结符(例如scanf和gets),或者您可以逐个字符地读取输入字符。
答案 2 :(得分:0)
您可以使用getchar()
手动获取单个字符 - 在循环中使用它来检查字符是否为ESC。但是,如果您要写更大的内容,最好使用像pdcurses这样的专用库。
答案 3 :(得分:0)
我认为你真的不需要从控制台读取那么多数据。也许尝试考虑将数据放入文件然后从文件中读取。