我对C ++非常陌生(这实际上是我曾经做过的第一个程序),而且在编写这个程序时我几乎要学习它,而且我已经陷入困境。
程序应该读入文本文件,将其加载到数组中并为数组中的每个数字指定一个字符(因此,我认为我将创建2个数组, int数组,其中包含从文件中读入的数字,以及带有分配给数字的字符的char数组。然后它将打印这两个数组。然后它应该通过初始int数组并搜索其值与其相邻值不同的任何数字,如果找到这样的值,它应该给数字赋值它的邻近值的平均值。它应该进行所有这些修正,然后为这些修正的数字分配字符并打印出两个数组。
我真的不知道如何做到这一点,但我会尝试将我的问题缩小到我最初的问题。我不知道如何从文件中加载数组。我的教科书似乎很好地涵盖了数组和文件,但它并没有真正将它们结合在一起并讨论如何从文件构建数组。
这是文件的样子,第一个数字是数组的大小。
10
7 6 9 4 5 4 3 2 1 0
6 5 5 5 6 5 4 3 2 1
6 5 6 6 7 6 8 4 3 2
1 5 6 7 7 7 6 5 4 3
5 5 6 7 6 7 7 6 5 9
5 6 7 6 5 6 6 5 4 3
5 6 7 9 5 5 6 5 4 3
5 5 6 7 6 6 7 6 5 4
5 9 5 6 7 6 5 0 3 2
5 5 5 5 6 5 4 3 2 7
这是我到目前为止所使用的代码,尽管其中绝大部分都涉及打开文件。我假设它至少正确地这样做,因为当我运行它时,我没有得到"无法打开文件错误"。
#include <iostream>
#include <fstream>
#include <array>
int main() { // Main will be in prog1_test
//Open file
ifstream prog1File("prog1.dat", ios::in);
//If file can't be opened, exit
if (!prog1File) {
cerr << "File could not be opened" << end;
exit(EXIT_FAILURE);
}
int size;
int numArray[][];
}
虽然我确实声明了大小和数组变量,但我不知道这是否正确完成,就像我说的那样,我还是很陌生。我知道一些基本的Java,但我很难弄清楚事情如何转化为c ++。任何建议都非常感谢。
答案 0 :(得分:3)
用ifos替换ofstream,用ios :: in
替换ios :: out#include <iostream>
#include <fstream>
#include <array>
int main() { // Main will be in prog1_test
//Open file
ifstream prog1File("prog1.dat", ios::in);
//If file can't be opened, exit
if (!prog1File) {
cerr << "File could not be opened" << end;
exit(EXIT_FAILURE);
}
int size;
int numArray[][];
}
ofstream用于写入而不是从文件读取,ios :: out是输出打开模式而不是输入打开模式。
我希望这会有所帮助。
答案 1 :(得分:2)
我没有真正解决漏洞问题。我假设您在创建2D阵列和从文件中读取它时遇到了麻烦。所以这里有一些代码,展示了如何从我的角度来完成它:
#include <iostream>
#include <fstream>
#include <vector>
int main() { // Main will be in prog1_test
//Open file
ifstream prog1File("prog1.dat");
//If file can't be opened, exit
if (!prog1File) {
cerr << "File could not be opened" << end;
exit(EXIT_FAILURE);
}
int size;
prog1File >> size;
int[][] matrix = new int[size][];
for (int i = 0; i < size; ++i)
{
matrix[i] = new int[size];
for (int j = 0; j < size; ++j)
{
prog1File >> matrix[i][j];
}
}
/* do your stuff */
for (int i = 0; i < size; ++i)
{
delete matrix[i];
}
delete matrix;
return 0;
}