如何将该程序从C++转换为C

How to convert this program from C++ to C?

本文关键字:C++ 转换 程序      更新时间:2023-10-16

我需要将程序的这一部分从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 opennn";
        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和...?

好吧,击中明显的候选人:

  • C 中没有引用(例如 unsigned int &nl),因此您需要传递指针并通过取消引用这些指针来更改基础数据。
  • 您可以只使用int而不是bool
  • C 中没有ifstream对象,请改用 fopen 调用打开文件。
  • getline可以变成fgets.
  • 您可以使用fseek而不是seekg
  • C 中没有智能字符串,您需要在稍低的级别(字符数组)管理它们。
  • length可以替换为 strlen .

几乎可以肯定还有其他一些小问题,但这应该是一个好的开始。