我正在开发一个程序,该程序从如下格式的文件中读取一些数据:
21
285 270 272 126 160 103 1
31
198 180 163 89 94 47 1
32
240 230 208 179 163 104 1
33
15 13 12 14 15 15 0
34
63 61 62 24 23 20 2
我正在尝试将第一个数字读入一个指针数组,将其他7个数字读入并行二维指针数组但由于某种原因,每次运行我的代码时它都会停止工作。它没有返回错误,但我觉得我的指针用法是错误的,因为这是我第一次使用指针。数据文件名为“election_data_121.txt”,fyi。继承人的代码。如果有人可以看看我会非常感激:
#include <iostream>
#include <fstream>
using namespace std;
//bool openFileIn(fstream &, char *);
int main()
{
const int PREC_SIZE = 30;
const int CANIDATES = 7;
int *precinct_num[PREC_SIZE];
int *num_votes[PREC_SIZE][CANIDATES];
cout << "Declarations made." << endl;
fstream dataFile; //Make a file handle
cout << "File object made." << endl;
//Open the file and check that it opened correctly
if(!openFileIn(dataFile, "election_data_121.txt"))
{
cout << "File open error!" << endl;
return 0; //Exit the program
}
cout << "File opened." << endl;
//Read the contents of the file into the proper arrays
int counter = 0;
while(!dataFile.eof())
{
dataFile >> *precinct_num[counter];
for(int i = 0; i < 7; i++)
{
dataFile >> *num_votes[counter][i];
}
counter++;
}
//Print out the data
for(int j = 0; j < counter; j++)
{
cout << *precinct_num[j];
for(int i = 0; i < 7; i++)
{
cout << *num_votes[j][i];
}
}
dataFile.close();
cout << "End of file";
return 0;
}
bool openFileIn(fstream &file, char *name)
{
file.open(name, ios::in);
if(file.fail())
return false;
else
return true;
}
再次感谢!
答案 0 :(得分:4)
这段代码根本不需要指针;为什么你会这么想?只需更改precinct_num
和num_votes
的类型并停止取消引用它们,我认为(一目了然)它应该没问题。
#include <iostream>
#include <fstream>
using namespace std;
//bool openFileIn(fstream &, char *);
int main()
{
const int PREC_SIZE = 30;
const int CANIDATES = 7;
int precinct_num[PREC_SIZE];
int num_votes[PREC_SIZE][CANIDATES];
cout << "Declarations made." << endl;
fstream dataFile; //Make a file handle
cout << "File object made." << endl;
//Open the file and check that it opened correctly
if(!openFileIn(dataFile, "election_data_121.txt"))
{
cout << "File open error!" << endl;
return 0; //Exit the program
}
cout << "File opened." << endl;
//Read the contents of the file into the proper arrays
int counter = 0;
while(!dataFile.eof())
{
dataFile >> precinct_num[counter];
for(int i = 0; i < 7; i++)
{
dataFile >> num_votes[counter][i];
}
counter++;
}
//Print out the data
for(int j = 0; j < counter; j++)
{
cout << precinct_num[j];
for(int i = 0; i < 7; i++)
{
cout << num_votes[j][i];
}
}
dataFile.close();
cout << "End of file";
return 0;
}
bool openFileIn(fstream &file, char *name)
{
file.open(name, ios::in);
return !file.fail();
}
答案 1 :(得分:1)
是的,看起来你对指针的理解是有缺陷的。我不明白为什么你在这里使用指针语法。只需删除指针定义和解引用,它应该做你想要的。您正在声明一组指向int的指针。也就是说,数组的每个元素都包含一个指向int而不是int的指针。您的代码似乎希望每个数组元素都包含一个int。
我建议你查阅一篇关于C ++指针的好教程。
答案 2 :(得分:0)
首先需要为precinct_num和num_votes分配一些空间。使用malloc / calloc或者只是将它放在堆栈上。
答案 3 :(得分:0)
您应该更改precinct_num和num_votes变量的声明。现在它们是指针到数组。你遇到的错误是这些指针并没有指向任何东西!所以你不希望指针到数组。你只需要直接使用数组。所以将它们改为:
int precinct_num[PREC_SIZE];
int num_votes[PREC_SIZE][CANIDATES];
然后,当您阅读这些值时,您只想:
dataFile >> precinct_num[counter];
和
dataFile >> num_votes[counter][i];
等...
这只是指针方面。我没有看过一般的代码,看看它是否正在做正确的事情。