0

我已经编写了一个代码来读取下面的文件,但它不起作用。输入文件:

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 个周期引脚必须分配 1 和 1234 作为输入。

4

3 回答 3

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();
}
于 2012-04-25T20:39:18.620 回答
1

您的代码的某些部分几乎可以肯定是错误的。其他部分我不太确定——它们对我来说没有多大意义,但也许我只是错过了一些东西。

while(input_file)

这几乎总是一个错误。直到尝试从文件读取失败,它才会感知文件的结尾。在典型情况下,您的循环将比预期多执行一次迭代。你可能想要的是这样的:

while (input_file >> num_pins)

这将从文件中读取数据(或尝试读取),如果失败则退出循环。

if (pins_.size() != num_pins) return false;

这不太清楚。如果我们已经知道它需要什么值,那么我们为什么要从文件中读取它根本不清楚( vs.num_pins似乎也是如此)。widthwire.width

for (size_t i = 1; i < file_name.size(); i=i+1)
        input_file>>cycles;

这让我觉得最令人费解的部分。保存文件名的字符串的大小与什么有关?这已经相当令人费解了。

于 2012-04-25T20:42:29.803 回答
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;
    }

此实现使用数组,但它不起作用,尽管没有任何编译错误。

于 2012-04-26T04:34:45.500 回答