C++ 如何实现用户定义的可变文本文件名,然后从中获取3x3矩阵?

C++ 如何实现用户定义的可变文本文件名,然后从中获取3x3矩阵?,c++,file-io,matrix,C++,File Io,Matrix,我需要编写一个程序,从用户定义的文件中获取一个3x3矩阵,打印它,然后确定它是否是一个 我的最新版本有一些我不知道如何解决的问题,我对此困惑了几个小时。我已经做了所有的事情,从试图在网上找到解决方案到再次回顾基础知识 我尝试了大卫·布朗的解决方案,但我意识到我们彼此误解了 我希望用户输入文件名,程序从中获取3x3矩阵(使用ifstream),打印矩阵,然后确定它是否是幻方 #include <iostream> #include <fstream> #include &l

我需要编写一个程序,从用户定义的文件中获取一个3x3矩阵,打印它,然后确定它是否是一个

我的最新版本有一些我不知道如何解决的问题,我对此困惑了几个小时。我已经做了所有的事情,从试图在网上找到解决方案到再次回顾基础知识

我尝试了大卫·布朗的解决方案,但我意识到我们彼此误解了

我希望用户输入文件名,程序从中获取3x3矩阵(使用ifstream),打印矩阵,然后确定它是否是幻方

#include <iostream>
#include <fstream>
#include <iomanip> #include <string>

using namespace std;

int main()
{
    int n = 3;
    int row, col, r, c, i, j, k, diag=0;
    int magic[19][19];

    std::string fout = "my_file_name.txt";

    std::ifstream ifs(fout.c_str());

    for(j=0 ; j<n+1 ; j++){
        for(k=0 ; k<n+1 ; k++)
            magic[j][k] = 0;
    }

    row=1;
    col=(n+1)/2;
    magic[row-1][col-1]=1;

    for(i=2 ; i<=(n*n) ; i++){
        row-=1;
        col-=1;

        if(row==0 && col==0){
            col++;
            row+=2
        }
        else if(row==0)
            row=n;
        else if(col==0)
            col=n;
        else if(magic[row-1][col-1]!=0){
            col++;
            row+=2;
        }

        magic[row-1][col-1]=i;
    }

    for(r=0; r<n; r++){
        for(c=0; c<n; c++){
            magic[r][n]+=magic[r][c];
        }
    }

    for(c=0; c<n; c++){
        for(r=0; r<n; r++){
            magic[n][c]+=magic[r][c];
        }
    }

    for(r=0; r<n; r++){
        magic[n][n] += magic[r][r];
    }

    for(r=0; r<n; r++){
        c = n - r + 1;
        diag+=magic[r][c];
    }

    for(r=0; r<(n+1) ; r++){
        fout << endl;
        for(c=0; c<(n+1) ; c++){
            fout << setw (5) << magic[r][c];
        }
        fout << endl;
    }

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int n=3;
int行,列,r,c,i,j,k,diag=0;
int magic[19][19];;
std::string fout=“my_file_name.txt”;
标准::ifstream ifs(fout.c_str());

for(j=0;j
fout
是一个
std::string
(包含“my_file_name.txt”),但您似乎试图将其用作
std::of stream
。您是否打算将
fout
声明为

std::ofstream fout("my_file_name.txt");

正如David Brown指出的,您没有正确使用
fout
。听起来您实际上想将矩阵打印到控制台。如果是这样,您希望
cout

for(r=0; r<(n+1) ; r++){
    cout << endl;
    for(c=0; c<(n+1) ; c++){
        cout << setw (5) << magic[r][c];
    }
    cout << endl;
}

for(r=0;rw您的具体问题是什么?编译器为我提供了以下信息:C:\programs\C\maagiav1.cpp:In函数`int main()“:C:\programs\C\maagiav1.cpp:56:错误:与”运算符不匹配编译器非常正确,没有
operator@David,是的,我想用它作为文件输出的文件流。我尝试了那个解决方案,然后意识到我误解了你们的要求,你们也误解了我。我想让用户输入文件名,t程序使用文件名从中获取3x3预制矩阵(ifstream),然后打印它,然后分析它是否是魔法矩阵。