[英]Reading number of lines from file and using it in functions in c++
我的问题可能微不足道,但是我不知道如何处理。 我有一个程序,该程序从文件中读取矩阵,然后从文件中收集矩阵,将其显示并对其执行数字方法。 当我通过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,所有这些方法就可以正常工作,而不是尝试从文件中读取它。 老实说,我必须从文件中读取它,但是我在编程方面不太出色,因此感谢任何提示和帮助。
ifstream在内部跟踪它已读入文件的距离。 当countLines方法返回时,ifstream一直读取到文件末尾,当您将其传递给collectMatrix时,ifstream仍将文件末尾作为其在文件中的当前位置。 当您尝试填写矩阵时,没有什么要读取的文件,因此未设置矩阵值。
您有几种选择可以解决此问题。 第一种是在填写值时计算矩阵的大小。 您的代码似乎表明矩阵是正方形; 如果是这样,您只需查看第一行即可确定矩阵的大小。 另一种更简单但效率更低的方法是仅创建具有相同文件的第二个ifstream并将其传递给collectMatrix。 当您两次浏览文件时,这种方法将相当慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.