我已经编写了一个代码来读取下面的文件,但它没有用。 输入文件:
2 1 16
16 0 0
1 1 1234
16 0 0
1 1 2345
代码是:
std::ifstream input_file;
evl_wire wire;
int num_pins,width,cycles,no;
std::vector<int>IP;
while(input_file)
{
input_file >> num_pins;//num_pins=2
if (pins_.size() != num_pins) return false;
for (size_t i = 0; i < pins_.size(); ++i)
{
input_file >> width;//width=1 for 1=0 ,=16 for i=2
if (wire.width != width) return false;
pins_[i]->set_as_output();
}
for (size_t i = 1; i < file_name.size(); i=i+1)
input_file>>cycles;
input_file>>no;
pins_=IP;
}
其中std::vector<pin *> pins_;
在门类中,void set_as_output();
在引脚类中
2表示引脚,第一引脚的1个宽度和第二引脚的16个宽度。
此处从文件16中的第二行开始,周期引脚必须保持为0 0,对于下一个周期,引脚必须分配1和1234作为输入。
答案 0 :(得分:1)
我不完全理解您的代码,但我没有看到您在任何地方打开输入文件。我认为应该是:
std::ifstream input_file;
evl_wire wire;
int num_pins,width,cycles,no;
std::vector<int>IP;
input_file.open("name of the file");
if(input_file.is_open())
{
while(input_file >> num_pins) //num_pins=2
{
if (pins_.size() != num_pins) return false;
for (size_t i = 0; i < pins_.size(); ++i)
{
input_file >> width;//width=1 for 1=0 ,=16 for i=2
if (wire.width != width) return false;
pins_[i]->set_as_output();
}
for (size_t i = 1; i < file_name.size(); i=i+1)
input_file>>cycles;
input_file>>no;
pins_=IP;
}
input_file.close();
}
答案 1 :(得分:1)
您的代码的某些部分几乎肯定是错误的。我不太确定的其他部分 - 它们对我没有多大意义,但也许我只是遗漏了一些东西。
while(input_file)
这几乎总是一个错误。在尝试从文件读取失败后 之后,它才会检测到文件的结尾。在典型情况下,循环将执行比预期更多的迭代。你可能想要的是:
while (input_file >> num_pins)
这将从文件中读取数据(或尝试,无论如何),如果失败则退出循环。
if (pins_.size() != num_pins) return false;
这不太清楚。如果我们已经知道它需要什么值,那么我们从文件中读取num_pins
的原因一点都不清楚(width
与wire.width
相似的情况也是如此。
for (size_t i = 1; i < file_name.size(); i=i+1)
input_file>>cycles;
这让我感到非常困惑。持有文件名的字符串的大小与任何有什么关系?这令人感到困惑。
答案 2 :(得分:0)
我使用的功能:
bool input::validate_structural_semantics()
{
evl_wire wire;
std::ifstream input_file;std::string line;
int x[]={1000};
for (int line_no = 1; std::getline(input_file, line); ++line_no)
std::string s; int i=0;
std::istringstream iss;
do
{
std::string sub;
iss >> sub;
x[i]=atoi(sub.c_str());
i++;
}
while (iss);
if (pins_.size()!=x[0]) return false;
for (size_t i = 0; i < pins_.size(); ++i)
{
if (wire.width != x[i+1]) return false;
pins_[i]->set_as_input();
}
for(size_t i=4;i<1000;i++)
{
for(size_t j=0;j<pins_.size();j++)
pins_.assign(x[i-1],x[i+j]);
}
return true;
}
此实现正在使用数组,但它不起作用,尽管没有任何编译错误。