返回

使用read()获取c中的输入

发布时间:2022-03-02 15:45:53 450
# c++

所以我尝试使用read()获取用户输入。while循环一直运行,直到在linux终端中输入ctrl+d并停止输入。我写了一些代码,但我遇到的问题是,我不知道如何准确地获取输入中的内容以及如何使用它。

在下面的代码中,在if(buff[offset] == '\n')(运行给定的输入,完成后清除缓冲区并转到下一个输入)我不知道如何进入3种可能的输入情况,也不知道如何从第二种情况中获取数字:

  • &引用;e";-退出程序
  • &引用;p N";-做点什么,N是一个数字,我也需要把它放入一个变量中(我认为buff[offset-1]我应该知道号码,但我不太确定。)
  • 其他一切-打印消息

代码:

int fd = 0; // set read() to read from STDIN_FILENO, because it's number is 0
const size_t read_size = 1; // set chunk size
size_t size = read_size; 
size_t offset = 0;
size_t res = 0;

char *buff = malloc(size+1);
*buff = '\0';

while((res = read(fd, buff + offset, read_size)) > 0) // read from stdin and save to buff
{       
    if(buff[offset] == '\n')
    { // THIS PART
        buff[offset] = '\0';
        if(buff == "e")
        {
            // exit the program
            return 0;
        }
        else if(buff == "p")
        {
            // do sth
        }
        else
        {
            // print a message
        }
        
        // reset the buffer (free its memory and allocate new memory for the next input)
        offset = 0;
        size = read_size;
        free(buff);
        buff = NULL;
        buff = malloc(size + 1);
        *buff = '\0';
    }
    else
    {
        offset += res;
        buff[offset] = '\0';
        
        if (offset + read_size > size)
        {
            size *= 2;
            buff = realloc(buff, size+1);
        }
    }
}

如果read()无法实现这一点,我可以尝试其他类似fgets()的功能,也许?

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像