我正在尝试读取文本文件,直到找到第一个换行符并打印出第一行直到第一个换行符。
我正在使用read(2)和write(2)unix系统调用来完成此操作。不想为此使用getline()函数。我想浏览缓冲区数组中的每个字符并打印出元素,直到我到达第一行中的第一个换行符。还试图找出对第二行和文本文件中的最后一行做同样的事情。如果有意义的话,每一行都会显示在各自独立的程序中。
以下是我到目前为止的第一线计划....
#define BUFFSIZE 4
int main(int argc, char** argv)
{
if(argc != 2)
{
cout << argv[0] << "need filename" << endl;
exit(4);
}
int n = 0;
char buf[BUFFSIZE];
int fd = open(argv[1], O_RDONLY);
while((n = read(fd, buf, BUFFSIZE))>0)
{
if[buf[0] != '\n')
{
cout << buf[0];
}
if[buf[1] != '\n')
{
cout << buf[1];
}
if[buf[2] != '\n')
{
cout << buf[2];
}
if[buf[3] != '\n')
{
cout << buf[3];
}
}
close(fd);
}
我将输入文件作为命令参数。我在输入文本文件中有几行,就像......
Purple is a cool color
Blue is the color of the sky
Green is the color of the grass
当我运行这个程序时,它会在命令窗口中将所有行打印到一个长行中,并且每个句子之间没有空格。
Output
Purple is a cool colorBlue is the color of the skyGreen is the color of the grass
我希望只有在找到第一个换行符时才能打印第一行,并且我很难弄清楚如何打印数组中的每个元素,直到读取换行符。
答案 0 :(得分:0)
你的程序形成的方式你实际上告诉它打印所有内容,直到找到换行符,并且发现一个省略它。
为那些else
引入if !=
,在那里打印您想要的任何内容来代替换行符(例如2x换行符)。
列表也似乎格式不正确(条件后跟一个方括号),但我认为这是一个错别字。发布寻求帮助时编译的代码总是最好的。
同样如评论中所述,您一次只读4个条件,没有条件,您最终会陷入崩溃或垃圾输入。