将网格写入文件
Write a grid to a File
我正在编写代码来读取一组数字,然后在屏幕上以4x4网格显示它们,然后程序将确定它是否为魔方。我的问题是如何让用户将数字输入到readData方法中显示的文件中,以便在调用该方法时显示用户网格。
文件data.txt存储在哪里?
感谢#include<iostream>
#include<fstream>
using namespace std;
const int dimension = 4; // dimension for the array
typedef int Sq[dimension] [dimension]; // declare vector for type names
void ReadData(Sq square ) // read data from file
{ ifstream inFile;
char fileName[13] = "data.txt";
inFile.open (fileName); // open file for reading
for (int r = 0; r < dimension; r++) // row loop
for ( int c = 0; c < dimension; c++) // column loop
inFile >> square[r][c]; // read data into matrix
inFile.close( ); // close the file
}
void Display ( const Sq square ) // display matrix
{ cout << " Magic Square Program " << endl << endl;
for (int r = 0; r < dimension; r++)
{ for ( int c = 0; c < dimension; c++)
{ cout.width(6); //set output width to 6 characters
cout << square[r][c] << "t "; // display numbers
}
cout << endl;
}
}
bool magicSquare( Sq square) // add rows, columns, and diagonals
{ int firstSum = 0, sum;
bool magic = true;
for (int r = 0; r < dimension; r++) // add 1st column for a comparison
firstSum += square[r][1];
for (int r = 1; r < dimension; r++) // row loop first when adding rows
{ sum = 0;
for ( int c = 0; c < dimension; c++)
sum += square[r][c]; // add row
if ( sum != firstSum) // check for magic failure
return (false); // not magic
}
for ( int c = 0; c < dimension; c++) // column loop first when adding columns
{ sum = 0;
for (int r = 0; r < dimension; r++)
sum += square[r][c]; // add columns
if ( sum != firstSum) // check for magic failure
return (false); // not magic
}
sum = 0;
for (int r = 0; r < dimension; r++)
sum += square[r][r]; // add front diagonal
if ( sum != firstSum) // check for magic failure
return (false); // not magic
sum = 0;
for (int r = 0; r < dimension; r++)
sum += square[r][dimension - r - 1]; // add back diagonal
if ( sum != firstSum) // check for magic failure
return (false); // not magic
else
return (true);
} // end magicSquare function
int main( )
{
Sq square;
ReadData( square); // read data from file
Display ( square); // display matrix
if ( magicSquare(square) ) // check for magic property
cout << "n This Square is Magic n " << endl;
else
cout << "n This Square is Not Magic n " << endl;
system("Pause");
return(0);
}
最简单的方法是让程序将文件名作为命令行参数。Main应该是这样的,其中argc
是参数的数量,argv[]
是指向它们的char指针数组(argv[0]
总是可执行文件的名称)。参见int argc, char *argv[]是什么意思?
int main(int argc, char * argv[])
那么,你做
if (argc == 2)
{
ReadData(square, argv[1]);
...
}
else
...
和ReadData看起来像这样:-
void ReadData(Sq &square, const std::string &filename) // read data from file
{
ifstream inFile;
inFile.open (filename); // open file for reading
注意!您需要将square作为引用参数(&square
),否则您的输入数据将被忽略。
我的问题是如何让用户将数字输入到readData方法中显示的文件中?
问礼貌吗?由于它是磁盘上的一个文件,用户必须在程序启动之前填充。您可以使用适当的ifstream
标志来而不是创建不存在的文件,并显示错误消息,然后终止程序。
文件data.txt存储在哪里?
在二进制文件的当前执行路径。这可能是也可能不是二进制文件所在的文件夹。
作为旁注,当您使用c++时,std::array<>
可能比C风格的数组更适合。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 使用对象文件读取三角形数据网格
- Assimp - 如何使用任何文件格式导入带有纹理的网格?
- C++2D网格数组,从文件中读取和插入数组值
- 将多个网格放入单个波前 OBJ 文件中
- 无法在一个OpenVDB文件中获得两个网格
- 无法将带有布尔网格的文本文件读取为向量的向量
- 在 VTK 下保存网格文件
- C 库从3D文件格式(例如STL)获得常规网格
- 如何从文件中读取并将内容存储在动态 2D 数组中并以网格格式显示
- C 像网格一样读取文件
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- 3D模型文件并从中创建三角形网格
- 高效地执行文件I/O,以便对大型三维网格进行非顺序访问
- .dae文件如何存储网格数据
- 使用带有纹理的.x文件网格会覆盖其他对象的颜色
- 正在Visual C++中读取.obj网格文件
- 将网格写入文件
- c++库CGAL支持哪些网格文件类型的输入