【问题标题】:Why is this program only printing out the first line?为什么这个程序只打印第一行?
【发布时间】:2017-11-04 17:01:15
【问题描述】:

有人能解释一下为什么下面的代码只打印出第一行而不是前 3 行吗?我在一张纸上手动完成了 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);

【问题讨论】:

  • 给出整个代码
  • 好的,我更新了它以包含其他所有内容。
  • 仍然缺少一些东西。 fd 是什么?
  • 有人回答了我之前要找的东西。还是谢谢!

标签: c++ low-level-io


【解决方案1】:

如果一行有 30 个单词。之后换行然后 newLinePosition 将是 30 对吗?所以不会有第二行 30 > 3。

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

虽然我不确定为什么使用 i+1

【讨论】:

  • 谢谢!很好的解释。现在这对我来说完全有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
相关资源
最近更新 更多