2013-07-26 4 views
0

CSV 파일의 값을 읽고 4 개의 개별 배열에 저장하는 코드를 작성하려고합니다. 각 행에는 4 개의 값이 있습니다. 첫 번째 값은 두 번째 배열에서 한 배열에 저장되고, 세 번째 배열은 다른 배열에서, 네 번째 배열은 다른 배열에서 저장됩니다. 값이 0으로, 하나 개의 루프 후하지만 다음 루프가 실행 된 이후에 배열에 이전 저장된 값 재설정을 저장배열에 저장된 double 값이 사라지는 이유는 무엇입니까?

while (FBWS.good()) 
{ 
    getline (FBWS, infor,','); 
    istringstream (infor) >> infoc; 
    FBWSmin[i]=infoc; 

    cout << FBWSmin[i-1] << " "; 
    cout << FBWSmin[i] << "\n"; 

    getline (FBWS, infor,','); 
    istringstream (infor) >> infoc; 
    FBWSplus[i]=infoc; 

    getline (FBWS, infor,','); 
    istringstream (infor) >> infoc; 
    FBWStax[i]=infoc; 

    getline (FBWS, infor,','); 
    istringstream (infor) >> infoc; 
    FBWSmax[0]=infoc; 

    i=i++; 

} 

: 이것은 내가 지금까지 작성한 코드입니다. 나는 그것의 코딩 문법 또는 무엇인지 결정할 수 없다.

+0

__1) __ FBWSmax [0] = infoc;은 (는)'FBWSmax [i] = infoc;'입니까? __2) __ 당신의'while (FBWS.good()) '입력 루프는 [문제가 될 것입니다] (http://stackoverflow.com/questions/4324441/testing-stream-good-or-stream-eof-reads -last-line-twice). – Blastfurnace

답변

1

간단히 말해 i=i++i을 업데이트하지 않습니다. i++은 값을 증가시키고 은 이전 값을 반환합니다.

어쨌든 하나의 표현식에서 값을 두 번 업데이트하면이 버전은 정의되지 않은 동작입니다. 그러나 실제로는 실제로는 매번 i을 다시 자체로 설정하고 반복 할 때마다 동일한 행을 덮어 쓰는 것입니다. 그러나 정의되지 않은 동작은 이 일어날 수 있음을 의미합니다.! 전체 프로그램이 무의미 해집니다.

을 증분하여 i으로 작성하십시오.

(BTW, 다른 답변에는 시퀀스 포인트가 언급되어 있습니다. 어쨌든 코드를 작성하는 동안 일반적으로 생각하면 안되는 상당히 기술적 인 개념이므로 방해하지 않았습니다. 더 명확한 버전을 작성하십시오. . 당신이 변수를 증가하려면 '은 t이 더 이상 존재하고, "다음 서열") "전에 서열"에 대한 표준 회담의 새 버전

+0

더 나쁜 것은 정의되지 않은 동작입니다. –

+0

@ShafikYaghmour 나는 단지 그것을 추가하고 있었다 : D – BoBTFish

+0

그래서 나는 ++와 다른가? – user2611318

0

, 그것이 있어야 다음 중 하나

i++; 

또는

i = i + 1; 
,515,

정의되지 않은 동작에

i = i++; 

결과로서, 두 함께 퍼팅 - 동일한 변수를 업데이트하려고 두 개의 시퀀스 점 간의 지정되지 않는다.

1

귀하의 증가가 올바르지 않습니다 :

i = i++ ; 

는 프로그램이 올바른 나타나도 행동을 어떤 행동을 나타낼 수 있지만, 당신은 결과를 예측할 수 있다는 것을 의미 정의되지 않은 동작입니다 더 악화. 시퀀스 포인트간에 동일한 변수를 두 번 이상 수정할 수 없으므로이 경우 정의되지 않습니다. 그냥 예를 들어 독립 사전 (++i) 또는 포스트 (i++) 증가를, 사용

++i ; 

또한 using good or eof 작동하지 않을 수 있습니다.

관련 문제