为什么这个程序只打印出第一行?

时间:2017-11-04 17:01:15

标签: c++ low-level-io

有人可以解释为什么下面的代码只打印出第一行而不是前三行吗?我在一张纸上手动完成了for循环,我认为它会增加3行,但我的逻辑必须在某处。

#include <cstdlib>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#define BUFFSIZE 1024

int main(int argc, char** argv) {

 char buf[BUFFSIZE];
  int numRead = 0;
  int newlinePosition = -1;

  numRead = read(fd, buf, BUFFSIZE);
for(int i = 0; i < numRead && newlinePosition < 3; i++) {
    if(buf[i] == '\n') {
      newlinePosition = i;
      if(i + 1 < numRead) {
        newlinePosition += 1;
      }
    }
  }

  if(newlinePosition < 0) {
    newlinePosition = numRead;
  }

  write(STDOUT_FILENO, buf, newlinePosition);

1 个答案:

答案 0 :(得分:0)

如果一行有30个单词。在那之后换行,那么newLinePosition将是30对吗?所以没有第二行作为30&gt; 3。

for(int i = 0; i < numRead && newlinePosition < 3; i++) {
        if(buf[i] == '\n') {
          newlinePosition++;
          if(i + 1 < numRead) {
            newlinePosition += 1;
          }
        }
      }

虽然我不确定为什么i + 1&lt;使用numRead。但它应该对你有帮助。