【问题标题】:Reading number of lines from file and using it in functions in c++从文件中读取行数并在c ++中的函数中使用它
【发布时间】:2014-04-17 05:17:01
【问题描述】:

我的问题可能是微不足道的,但我不知道如何处理它。 我有一个程序从文件中读取矩阵,然后从文件中收集它,显示它并对其执行数值方法。 当我通过 cin 插入未知数(在这种情况下,它等于文件中的行数)时,我一切正常。 但是当我尝试从文件中读取行数然后读取矩阵时,显示它并执行方法 - 尽管我正确获得了行数,但程序读取矩阵就好像它由 0 组成。 下面是计算行数的代码:

int countLines(ifstream &file){
string line;
int l = 0;
do{
getline(file, line);
    l++;
}while(!file.eof());
return l;}

我在这里尝试使用它:

string nameoffile = "";
 nameoffile = "Matrix1.txt";
  ifstream file;
    file.open(nameoffile.c_str());
    if (file.good()==true)
    {
        cout <<"The file is available<<endl;
        n = countLines(file);
        cout << n << endl;
        collectMatrix(file,n);
    }
    else
    {
        return 0;
    }
    displayMatrix(n);

例如,collectMatrix 是这样的:

void collectMatrix(ifstream &file, int n){
for(int i = 0; i <n; i++)
{
    for(int j = 0; j <n; j++)
    {
        file>>A[i][j]; //matrix
    }
}      
for(int k=0; k<n; k++ )
{
    file>>b[k]; //vector of results
}            }

只要我在代码中有 cin>>n 而不是试图从文件中读取它,所有这些都可以工作。老实说,我必须从文件中读取它,但我的编程不太好,所以我会感谢任何提示和帮助。

【问题讨论】:

  • 什么是plik,不应该是file吗?我没有看到你在哪里设置文件的文件名,甚至没有打开它......到目前为止,这段代码看起来很乱。

标签: c++ file-io matrix


【解决方案1】:

ifstream 在内部跟踪它已读取文件的深度。当您的 countLines 方法返回时,ifstream 已一直读取到文件末尾,并且当您将其传递给 collectMatrix 时,它仍将文件末尾作为其在文件中的当前位置。当您尝试填充矩阵时,文件中没有任何内容可读取,因此未设置矩阵值。

你有几个选项来解决这个问题。第一个是在填写值时计算矩阵的大小。您的代码似乎表明矩阵是正方形的;如果是这样,您只需查看第一行即可确定矩阵的大小。另一种更简单但效率低得多的方法是使用相同的文件创建第二个 ifstream 并将其传递给 collectMatrix。这种方法会相当慢,因为您要通过文件两次。

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2022-07-21
    相关资源
    最近更新 更多