-3

プログラムのこの部分を C++ から C に変換する必要があります。

float ** OpenRotGrid_H(float **grid, unsigned int &nl, unsigned int & nc, bool &ok){
    ifstream fs;
    string line, num;
    unsigned int l(0),c(0),i(0),ncmax(0);

    fs.open("CarmY.txt");
    if (!fs) {
        //std::cout<<"Error: the Error file 'CarmY.txt' cannot be open\n\n";
        ok=false;
    }
    else{
        //size of the file
        getline(fs,line);
        ncmax= line.size()/MAXFLOAT;
        nl++;
        while(getline(fs,line)){
            nl++;
        }
        fs.clear();

        //Read CarmY values ( = grid)
        grid = initialize(nl,ncmax);
        fs.seekg(0,ios::beg); //initial position in the file

        while(getline(fs,line)){
            i=0;
            c=0;
            while(i<line.length()){
                while(i<line.length() && line[i]!='\t'){
                    num.push_back(line[i]);
                    i++;
                }
                grid[l][c]=(float) atof(num.c_str());
                c++;
                num.clear();
                if(i<line.length() && line[i]!='\n') i++;
            }
            l++;
        }
        nc=c;
        fs.close();
    }
    return grid;
}

int main(){

unsigned int nl=0 , nc=0 , nangle=0, nrot=0;
float **grid;
bool ok;

grid=initialize(nangle, nrot);
OpenRotGrid_H(grid, nl, nc, ok);


return 0;

} 

ファイル「C-arm」には長さの異なる数字の行がいくつかあります。このプログラムはこのファイルを開き、各数字を取得してグリッドに書き込みます。

getline(fs,line)たとえば、の代わりに何を使用できるかわかりませんfs.seekg...?

4

1 に答える 1

2

さて、明白な候補を打ちます:

  • Cには参照 ( などunsigned int &nl) がないため、ポインターを渡し、それらのポインターを逆参照して基になるデータを変更する必要があります。
  • intの代わりに使用できますbool
  • ifstreamC にはオブジェクトがありませんfopen。代わりに呼び出しを使用してファイルを開きます。
  • getlineに変えることができますfgets
  • fseekの代わりに使用できますseekg
  • C にはインテリジェントな文字列はありません。少し低いレベル (文字配列) で管理する必要があります。
  • lengthで置き換えることができますstrlen

ほぼ間違いなく他にもいくつかの小さなニグルがありますが、それは良いスタートになるはずです.

于 2012-12-04T13:19:57.233 に答える