gpt4 book ai didi

c++ - 如何将特定行的用户输入打印到控制台 (C++)

转载 作者:行者123 更新时间:2023-11-28 04:56:00 26 4
gpt4 key购买 nike

我正在使用 C++ 和终端。所以我的程序使用 read(STD_FILENO,buf,BUFFER 接收用户输入,我试图只写回特定的行。

例如,如果用户总共输入了 10 行,我将如何打印出第 3 行到第 7 行或第 6 行到第 10 行?

我正在尝试使用 write() 函数 (write(STD_FILENO,buf,BUFFER)) 但它没有打印我想要的内容。
我试过弄乱 BUFFER 并试图让它小于用户输入的字符总数,但它仍然无法正常工作。

我的理解是,无论我说 BUFFER 是什么,它都会写入该 BUFFER 值,因此它将从 0 开始到 BUFFER。但如果我想从第 6 行开始,那可能会从字符 #15 而不是 0 开始……这有意义吗?

请注意:我需要使用read()write()

谢谢!

最佳答案

如果您只需要使用 read(2)write(2) ,那么您还需要 open(2)close(2)lseek(2) 并且您需要在其之上设计和编写您自己的缓冲 IO 库。仔细阅读这里提到的每个系统调用的文档。使用他们每个人的结果。处理代码中的错误情况。参见 errno(3)perror(3)

所以保留一个缓冲区(或多个)和几个指针(或偏移量)到其中(可能至少是当前消耗的位置,以及最后一个 read 位置等)。

也许你会想要使用一些 container 。您可能会开始在您的缓冲 IO 类上实现您自己的 fgetc 等价物,并在其之上构建。

行在系统调用级别并不真正存在。您需要处理代码中的 \n

顺便说一句,您可以研究几个实现 <stdio.h>free software C 库的源代码,例如 musl-libc

当然,您应该使用所有警告和调试信息(g++ -Wall -Wextra -gGCC)进行编译,并且您需要使用调试器 gdb 来了解程序的行为并找到错误。不要害羞地在一些板上画出你的 virtual address space 中发生的事情(用箭头表示指针)。

注意:SO 不是做我的功课服务。

关于c++ - 如何将特定行的用户输入打印到控制台 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com