2016-10-14 13 views
0

HEVC 즉 X265에서 작업 중이며 여기에서 file.ear에서 읽은 값으로 QP 배열을 입력하려고합니다. QP 배열의 값은 0 (100)파일을 읽고 그것을 정수 배열로 입력하여 입력합니다.

에 내가 테스트 파일과 입력 1의 99 파일까지 0의 조합을 만들었다는 다음과 같습니다

10101010110101010000000000000000000000000000000000000000000000000000000000000000000000000000000000 

는 다음과 나는 이러한 목적으로 작성한 코드가 될 때 :

하지만 올바른 값을 가질 수 없습니다. qp_input은 0을 유지합니다. 내가 잘못하고있는 것은 무엇입니까?

+0

[왜 동안 (! myfile.eof()) 잘못] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a- loop-condition-considered-wrong) – BeyelerStudios

+0

파일에서 읽는 이상한 방법에도 불구하고 (관련 : http://stackoverflow.com/questions/18398167/how-to-copy-a-txt-file-to-a-char) -array-in-c), 코드가 잘 작동합니다. – SingerOfTheFall

+2

'1'의 ASCII 값이 48이 아니기 때문에 값이 틀립니다. 절대 마법 번호를 사용하지 마십시오. –

답변

0

배열에 입력하고 해당 배열 내의 배열 인덱스 대신 ">> input"포인터를 읽으려고합니다. ">> 입력 [인덱스]". 루프에 카운터가 있어야하며 배열을 읽어야합니다.

int index = 0; 
    while (!myfile.eof()) { 
     myfile >> input[index]; 
     cout<< input[index] <<endl; 
     index++; 
    } 
    myfile.close(); 

또한 파일의 데이터 유형은 다음과 같습니다. monent에서는 문자로 읽으므로 바이트라고 가정합니다. 결과를 일반 텍스트 10 진수 형식으로 입력하는 경우 입력 유형을 int 또는 double로 변경해야합니다.

+0

당신은 unchecked reads, bad example을 수행하고 있습니다 - 또한 문자열을 읽는 데있어 아무런 문제가 없습니다 – BeyelerStudios

+0

@BeyelerStudios하지만 입력 배열은 100이고 for 루프의 배열을 통해 반복됩니다. 분명히 입력 배열은 문자 배열 문자열이 아니지만 100 개의 항목을 저장하려고합니다. 필자가 제시 한 예제는 질문 인 인덱싱 문제를 간단히 수정합니다. –

+0

아니요, 코드가 OP 코드에 아무 것도 수정하지 않습니다. 대신 입력 파일에서 99 번째 문자에 대해 100 번째 항목을 정의되지 않은 상태로 두는 것과 같은 새로운 버그를 도입합니다. 입력 내용을 확인하지 않으면 100 번째 항목은 여전히'index'에 의해 계산되며 99 개 이상의 입력 문자가 있으면 배열 외부에 여전히 쓰게됩니다. 무엇이든 개선하지 마십시오. – BeyelerStudios

2

확인이 솔루션

#include <stdio.h> 
#include <iostream> 
#include <string.h> 
#include <sstream> 
#include <fstream> 
using namespace std; 
int main(int argc, char* argv[]) { 
    ifstream myfile; 
    myfile.open("text.txt"); 

    int qp_input[100]; 

    //will read whole contents to a string instead of while(!myfile.eof()) 
    std::string input((std::istreambuf_iterator<char>(myfile)), 
         (std::istreambuf_iterator<char>() )); 
    for(int i=0;i<input.size();i++){ 
     stringstream ss; 
     ss<<input[i]; 
     ss>>qp_input[i]; 
     cout<<i<<" : "<<qp_input[i]<<endl; 
    } 
} 
+1

'std :: for_each (std :: istream_iterator (myfile), std :: istream_iterator (), [] (char ch) {...});'를 사용하여 불필요한 할당을 건너 뛸 수도 있습니다. 'std :: transform'은'qp_input' 배열을 채 웁니다 ... – BeyelerStudios

+0

@BeyelerStudios wow .... thatz awesome. 하지만 우리는 그 의식을 위해서 11 개의 컴파일러가 필요합니다 ..? –

+1

람다 yes를 사용하려면, 펑터 타입 ('operator()'타입)을 정의하고 그 대신에 인스턴스를 사용하십시오. – BeyelerStudios