我编写了一些代码,以从输入文件中获取数据(这只是一列0和1),然后将其转换为许多32位数字。当我知道输入文件中有多少个数字时,这种方法可以正常工作。我正在尝试对其进行修改,以使其适用于我不知道大小的其他输入文件,这就是我遇到问题的地方
我的输入文件是rad。
我试过了:

int x=0;
while(!rad.eof()) {
x++;
}
cout << x;

什么也不会返回
while(!rad.eof()) {
        rad >> x;
        cout << x << endl;
    }

这会返回很多相同的大数
while(!rad.eof()) {
        rad >> x;
        cerr << x << endl;
    }

返回很多零

当我知道输入文件的大小时,可用的代码是:
/*const int m=32,n=40000; //n isnt 40000, change it so that its the size of    radioactivedata
    int a[n]; // variable to hold each number as it is read from file
    int i=0,j=0; //define variables
    for ( i=0 ; i<n ; i++ ) a[i]=0;
    for ( i=0 ; i<n ; i++ ); rad >> a[i]; //read numbers from rad into array with (>>) operator

    unsigned long Num=0;
    while(j<n){
        i = 0; //reinitialize i and Num
        Num = 0;
        while ( i<m ){
            Num = Num + (a[j])*pow(2.,i);
            i++;
            j++;
            }

        cout << j/m << "\t" << Num << endl;
        out << j/m << "\t" << Num << endl;
 }*/

任何帮助将不胜感激,请使用简单的语言。

最佳答案

假设rad std::ifstream ,则可以使用 seekg() tellg()

  // std::ios_base::ate seeks to the end of the file on construction of ifstream
  std::ifstream rad ("file.txt", std::ios_base::ate);
  int length = 0;
  if (rad) {
    length = is.tellg();
    is.seekg (0, std::ios_base::beg); // reset it to beginning if you want to use it
  }
  // .. use length

关于c++ - 如何找到输入文件的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35313589/

10-14 04:49