我的代码在从文件中读取时崩溃(在本文末尾看到)。我在main中声明了一个ifstream对象,通过buildGraph函数传递它(它将ifstream&作为参数),并尝试将第一个标记传递给字符串temp。
来自main的相关代码:
#include <fstream>
int main() {
ifstream infile1("data31.txt");
if (!infile1) {
cout << "File could not be opened." << endl;
return 1;
}
GraphM G;
G.buildGraph(infile1);
}
来自graphm.cpp的相关代码:
#include <fstream>
#include <string>
void GraphM::buildGraph(ifstream& input)
{
string temp;
input >> temp;
}
还有一个包含fstream的头文件graphm.h。我和几位在我所在大学工作的导师交谈过,他们根本没有能够提供帮助,因为他们和我一样困惑。函数getline()也会抛出一个分段错误,因此不会起作用。我在做什么错了,在这里?
另外,.txt我读的是:
5
Aurora and 85th
Green Lake Starbucks
Woodland Park Zoo
Troll under bridge
PCC
1 2 50
1 3 20
1 5 30
2 4 10
3 2 20
3 4 40
5 2 20
5 4 25
0 0 0
3
aaa
bbb
ccc
1 2 10
1 3 5
2 3 20
3 2 4
0 0 0
答案 0 :(得分:0)
(包含注释作为允许代码格式化的答案)
构建SSCCE我将所有代码包含在一个文件中,如下所示:
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
class GraphM {
public:
void buildGraph(ifstream& input);
};
void GraphM::buildGraph(ifstream& input)
{
string temp;
input >> temp;
cout << temp;
}
int main() {
ifstream infile1("data31.txt");
if (!infile1) {
cout << "File could not be opened." << endl;
return 1;
}
GraphM G;
G.buildGraph(infile1);
}
然后我编译并运行代码并获得预期的输出5
。
然后我将代码分成问题中描述的三个文件,编译并运行它们并再次获得相同的结果5
。我在Windows 7上的cygwin中使用GNU C ++ 4.7.3。
您能否告诉我们您正在使用的编译器以及系统的其他详细信息?
答案 1 :(得分:0)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
void buildGraph(ifstream& input)
{
string temp;
for(int i=0; i<sizeof(input); i++)
{
input >> temp;
cout<< temp;
}
}
int main()
{
ifstream infile1("test.txt");
if (!infile1)
{
cout << "File could not be opened." << endl;
return 1;
}
buildGraph(infile1);
}
我认为将文件转储成字符串可能是你的问题...... 我发布的代码没有给我带来任何问题,但你可能想尝试使用char *来捕获你的文件,然后将其分解为你想要的任何内容。