输入文件
9
2 8
0 6
8 5
2 4
3 1
2 3
4 1
6 1
2 6
7 5
1 7
代码
#include<iostream>
#include<fstream>
using namespace std;
int main(void)
{
ifstream in;
char infile[40];
int c, u, v;
cout << "Please enter the input data file name(NO SPACES): ";
cin >> infile;
in.open(infile);
while(in.fail()) {
cout << "Please enter a CORRECT input data file name(NO SPACES): ";
cin >> infile;
in.open(infile);
}
//adj matrix
c = in.get();
int array[c-1][c-1];
for(int i=0; i<c; i++) {
for(int j=0; j<c; j++) {
array[i][j] = 0;
}
}
while(!in.eof()) {
u = in.get();
v = in.get();
array[u][v] = 1;
}
cout << c << endl;
for(int i=0;i<c;i++) {
cout << i << " ";
for(int j=0;j<c;j++){
cout << array[i][j] << " ";
}
cout << endl;
}
in.close();
return 0;
}
输出应该是什么样的
9
0 0 0 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0 1 0
2 0 0 0 1 1 0 1 0 1
3 0 1 0 0 0 0 0 0 0
4 0 1 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0
6 0 1 0 0 0 0 0 0 0
7 0 0 0 0 0 1 0 0 0
8 0 0 0 0 0 1 0 0 0
当提示输入文件名时,如果我输入了错误的文件名,它将继续提示我输入CORRECT文件,但是当输入CORRECT文件名时,我得到&#34;分段错误(核心转储)& #34;
我想要输出输入文件中给出的相应边的邻接矩阵。
答案 0 :(得分:1)
std::basic_istream::get
将一次提取一个字符。因此'9'
与9
请按照 进行操作,假设您的文件实体正确且格式已知 :
in >> c;
int array[c][c]; // Indices from 0 to c-1
for(int i=0; i<c; i++) {
for(int j=0; j<c; j++) {
array[i][j] = 0;
}
}
while( in >> u >> v) {
array[u][v] = 1;
}
同样使用std::string
作为文件名而不是char数组。然后你可以使用
in.open( infile.c_str() ); // Pre C++11
或直接
in.open(infile); // with C++11