如何更改for循环以便我可以使用eof?

时间:2015-10-01 19:32:44

标签: c++

所以我必须创建一个代码,我从两个文件,库存和订单中读取。我已经比较了订单并获得了满足的项目数量和总金额。下面这个程序满足了所有需要,但我必须使用eof(),我不知道如何。 程序的这一部分之前的行只是简单地读取文件并将文件的信息导入到instream1和instream2,它们是文件的内部名称。非常感谢你提前。

for(int i=0;i<ord;i++){ 
    for(int j=0;j<inv;j++){ 
        if(prod_ord[i] == prod_code[j])       
            {
            if(order[i] <= units[j])
            {
                fullfill[i]= order[i];
                amt_billed[i] = fullfill[i] * unitprice[j];
            }
            else
            {
                fullfill[i]= units[j];
                amt_billed[i] = fullfill[i] * unitprice[j];
            }               
            }
        else
            {
                cout<< "Order invalid."<<endl;
    }
    }

}

float total_due = 0;

cout<< "Order#: order0923\nSalesman: full name\n \t Fullfilled \t Amt Billed" <<endl;
    for(int i= 0;i<ord;i++)
    {
        cout<< prod_ord[i]<<" \t"<<fullfill[i]<<" \t"<<amt_billed[i]<<endl;
        total_due += amt_billed[i];  
    }
cout<<"Total Due: $"<<total_due<<endl;

1 个答案:

答案 0 :(得分:1)

如果您正在使用<div id="formHolder"></div>,则可能意味着使用它来确定何时停止阅读输入。也就是说,您希望终止条件(eof()循环的第二个子句)调用for。不是一个完整的解决方案,因为这看起来像家庭作业,但基本上有两种等效的方法:

eof()

for (records = 0; !std::cin.eof(); ++records) {
  // Parse a record and store it, preferably in a vector.
  // The records variable stores the number of records.
}

但请注意

请注意,如果输入在读取记录时包含EOF ,则其中任何一个都将失败。所以你真的想要(未经测试):

int records = 0;
while (!std::cin.eof()) {
  // Read in and store a record, preferably in a vector.
  ++records;
}

如果您使用内置类型或重载bool read_record( std::istream&, record_t& ); using std::cin; constexpr size_t SOME_REASONABLE_NUMBER = 4096U/sizeof(record_t); std::vector<record_t> recordv; recordv.reserve(SOME_REASONABLE_NUMBER); while (cin.good()) { record_t this_record; if (read_record(cin, this_record)) recordv.push_back(this_record); else break; } std::istream::operator>>将有效。 (它返回对record_t this_record; while (cin >> this_record)的引用,如果流上没有错误,则引用为true。它不检查EOF,但下一次迭代将失败。)