0

我需要编写一个程序,从用户定义的文件中获取一个 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;
}
4

2 回答 2

0

正如大卫布朗指出的那样,您没有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;
}

要从用户那里获取文件名,请使用cin>>运算符。您可以在http://www.cplusplus.com/doc/tutorial/basic_io/阅读它。

要打开文件并读取其内容,您可以使用ifstream已定义的 ( ifs) 和>>运算符。先前的参考网站在http://www.cplusplus.com/doc/tutorial/files/也有关于此的教程

事实上,您可能只想浏览整个cplusplus.com 教程。如果您对任一主题有任何具体问题,请告诉我。

于 2013-04-23T19:16:55.773 回答
0

fout是一个std::string(包含“my_file_name.txt”),但您似乎正在尝试像std::ofstream. 你的意思是声明fout

std::ofstream fout("my_file_name.txt");
于 2013-04-22T19:53:42.693 回答