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 番目のピンの幅は 1、2 番目のピンの幅は 16 です。ここで、ファイル 16 の 2 行目からは、ピンが 0 のままでなければならないサイクル数です。次の 1 サイクルでは、ピンに 1 と 1234 を入力として割り当てる必要があります。

4

3 に答える 3

1

コードの一部がほぼ確実に間違っています。私があまり確信していない他の部分-それらは私にはあまり意味がありませんが、何かが欠けているだけかもしれません.

while(input_file)

これはほとんどの場合間違いです。ファイルからの読み取りの試行が失敗するまでファイルの終わりを感知しません。通常、ループは意図したよりも 1 回多く反復を実行します。おそらくあなたが望むのは次のようなものです:

while (input_file >> num_pins)

これにより、ファイルからデータが読み取られ (またはとにかく試行され)、失敗した場合はループが終了します。

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

これはあまり明確ではありません。num_pins必要な値がすでにわかっている場合に、ファイルから読み取る理由はまったく明確ではありません( widthvs.についても同じことが当てはまるようですwire.width)。

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

これは、すべての中で最も不可解な部分として私を襲います。ファイル名を保持する文字列のサイズは何と関係があります? これはかなり当惑しました。

于 2012-04-25T20:42:29.803 に答える
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 に答える
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 に答える