簡體   English   中英

使用向量讀取輸入文件

[英]read an input file using vectors

我已經編寫了一個代碼來讀取下面的文件,但它不起作用。 輸入文件:

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作為輸入。

我不完全理解你的代碼,但我沒有看到你在任何地方打開輸入文件。 我認為它應該是:

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();
}

代碼的某些部分幾乎肯定是錯誤的。 其他部分我不太確定 - 它們對我沒有多大意義,但也許我只是遺漏了一些東西。

while(input_file)

這幾乎總是一個錯誤。 嘗試從文件讀取失敗之后 ,它才會檢測到文件的結尾。 在典型情況下,循環將執行比預期更多的迭代。 你可能想要的是:

while (input_file >> num_pins)

這將從文件中讀取數據(或嘗試,無論如何),如果失敗則退出循環。

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

這不太清楚。 如果我們已經知道它需要什么值,那么我們從文件中讀取num_pins原因一點也不清楚( widthwire.width )。

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

這讓我感到非常困惑。 保存文件名的字符串大小與任何內容什么關系 這令人感到困惑。

我使用的功能:

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;
    }

此實現使用數組,但它不起作用,盡管沒有任何編譯錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM