2017-11-04 2 views
-3

누군가 다음 코드가 첫 번째 줄만 인쇄하는 이유를 설명 할 수 있습니까? 나는 for-loop를 수동으로 한장의 종이에 썼다. 나는 그것이 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); 
+0

전체 코드 – PeMaCN

+0

좋아요, 다른 모든 것을 포함하도록 업데이트했습니다. – HelpMe

+0

아직 누락 된 부분이 있습니다. 'fd'는 무엇입니까? – ShadowMitia

답변

0

한 줄에 30 단어가있는 경우. 그 후 개행을하면 newLinePosition은 30이 될 것입니다. 나는 + 1 < numRead를 사용하는 이유는 확실하지 오전하지만

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

3> (30)로 그래서 두 번째 줄이 없습니다. 그러나 그것은 당신을 도와야합니다.

+0

감사합니다. 좋은 설명. 이제는 나에게 완전히 이해가됩니다. – HelpMe

관련 문제