【问题标题】:How can I implement a variable text file name that is defined by the user and then get the 3x3 matrix from it?如何实现由用户定义的可变文本文件名,然后从中获取 3x3 矩阵?
【发布时间】:2013-04-22 19:39:01
【问题描述】:

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

我的最新版本有一些我不知道如何解决的问题,我为此困惑了好几个小时。从尝试在网络上寻找解决方案到再次复习基础知识,我已经完成了所有工作。

我尝试了 David Brown 的解决方案,但我意识到我们彼此误解了。

我希望用户输入文件名,程序从中获取 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;
}

【问题讨论】:

  • 您的具体问题是什么?
  • 编译器为我提供了这个:C:\programs\c\maagiav1.cpp: In function `int main()': C:\programs\c\maagiav1.cpp:56: error: no匹配 'fout
  • 而且编译器非常正确,没有operator&lt;&lt; 重载以std::string 作为左侧参数。你的意思是fout 可能是某种文件流吗?
  • @David,是的,我想将它用作文件输出的文件流

标签: c++ file-io matrix


【解决方案1】:

foutstd::string(包含“my_file_name.txt”),但您似乎试图像使用 std::ofstream 一样使用它。你的意思是声明fout

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

【讨论】:

  • 我尝试了那个解决方案,然后意识到我误解了你们问我的问题,而你们也误解了我。我希望用户输入文件名,程序使用文件名从中获取3x3预制矩阵(ifstream)然后打印它然后分析它是否是神奇矩阵。
【解决方案2】:

正如大卫布朗指出的那样,您没有正确使用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&gt;&gt; 运算符。你可以在http://www.cplusplus.com/doc/tutorial/basic_io/阅读它。

要打开文件并读取其内容,您可以使用已定义的ifstream (ifs) 和&gt;&gt; 运算符。之前的参考网站也有这方面的教程http://www.cplusplus.com/doc/tutorial/files/

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多