我的代码在这里:http://pastebin.com/zgUef181
table.cpp:
#include <iostream>
#include "table.h"
#include <fstream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <math.h>
using namespace std;
Table::Table(){
userFile = "";
tableArray[0][0];
height = 0;
width = 0;
n = 0;
}
Table::~Table(){
// cout<<"Object terminated...forevurrrr"<<endl;
}
void Table::readInFile(){
cout<<"Reading file..."<<endl;
ifstream readme(userFile.c_str());
string line;
int countRow= 0; //this count = the row in the array
while(getline(readme, line)){
if(countRow == 0){
n = atoi(line.c_str());
countRow++;
}
else{
for(int i = 0; i < line.length();++i){
if(line[i]=='0'){
tableArray[countRow-1][i]=0;
cout << tableArray[countRow-1][i] << " ";
}
else if(line[i]=='1'){
tableArray[countRow-1][i]=1;
cout << tableArray[countRow-1][i] << " ";
}
else{
}
}
if(countRow == height){
cout<<"line: " << line[line.length()-1] << endl;
//int wtf = line[line.length()-1];
//cout << "wtf: " << wtf;
}
else{
cout<<"line: " << line[line.length()-2] << endl;
}
countRow++;
}
}
Table::printArray(tableArray, height, width);
}
void Table::getFileName(){
cout << "Enter file name pls: " << endl;
cin >> userFile;
if(checkIfExists(userFile)!=true){
cout << "Nope, couldn't find the file. Try again." << endl;
Table::getFileName();
}
else{
Table::collectInfo();
Table::readInFile();
}
}
//check if the file exists
bool Table::checkIfExists(string file_path){
cout<<"Gotta check if this exists..."<<endl;
bool real_file=0;
ifstream mystream(file_path.c_str());
string line;
try{
while(getline(mystream, line)){
real_file=1;
}
cout<<"Found da booty"<<endl;
}
catch(int e){
cout<<"we got an error bruh"<<endl;
}
mystream.close();
return real_file;
}
void Table::collectInfo(){
cout<<"collectInfo"<<endl;
ifstream readme(userFile.c_str());
string line;
string leHeight;
getline(readme, leHeight);
height = atoi(leHeight.c_str());
height = pow(2,height);
cout<<height<<endl;
while(getline(readme, line)){
width = line.length();
}
width = (width + 1) / 2;
cout<<width<<endl;
int** tempTable = new int*[width];
for(int i = 0; i < height; ++i){
tempTable[i] = new int[width];
}
tableArray = tempTable;
}
void Table::printArray(int** array, int h, int w){
cout<<"printArray"<<endl;
//string line;
for(int i = 0; i < h; i++){
for(int j = 0; j < w; j++){
cout << array[i][j];
if(j==(w-1))
cout << endl;
// if(array[i][j]==1){
// line.append("1 ");
// }
// else if(array[i][j]==0){
// line.append("0 ");
// }
// else{
// line.append("error");
// }
}
//cout<<line<<endl;
//line="";
}
}
table.h:
#include <iostream>
#include <fstream>
using namespace std;
#ifndef TABLETOBOOL
#define TABLETOBOOL
class Table{
private:
string userFile;
int** tableArray;
int numOfRow;
int numOfCol;
int height;
int width;
int n;
public:
Table();
~Table();
void printArray(int**,int,int);
void readInFile();
void getFileName();
bool checkIfExists(string file_path);
void collectInfo();
};
#endif
tableMain.cpp:
#include <iostream>
#include "table.h"
#include <fstream>
using namespace std;
int main()
{
Table runTable;
runTable.getFileName();
return 0;
}
// sample2.txt
4
0 0 0 0 1
0 0 0 1 0
0 0 1 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 1
1 1 0 1 0
1 1 1 0 1
1 1 1 1 0
它具有要输入程序的实现文件,头文件,主文本和示例文本。
示例文本的第一行是输入数,因此2 ^ n(n是输入数)是真值表中的行数。到目前为止,我可以在文件中读取然后正确输出它,但看起来它实际上并没有因为某种原因保存到数组中。
Here is a screenshot执行。 “读取文件...”之后是在readInFile函数中打印出的真值表。 “Line:”部分显示输出,1或0,这是每行的最后一个数字。这很重要,因为输出为0的行可以省略,因为我最终试图创建一个简化的布尔表达式。我想做的是使用if语句,如“if(line [line.length() - 1] == 0){//跳过文件中的行}”。我尝试过这个并没有用,我不明白为什么。
当我去打印数组时,它打印出一堆我只能假设为内存地址的东西?我不太确定。
提前感谢您的帮助。一切顺利
答案 0 :(得分:0)
此代码的一个问题是,在开始编写代码之前,永远不会为TableArray
分配内存。如果您事先知道width
和height
,则可以将您的存储空间声明为std::vector
。
另一个问题是计算每行宽度的代码真的很奇怪而且很脆弱。一个向量会让你只有push_back
提示,直到你用完为止。
答案 1 :(得分:0)
这可能无法解决您的所有问题,但......
您没有为tempTable
分配足够的内存。你有:
int** tempTable = new int*[width];
但它应该是:
int** tempTable = new int*[height];