Я новичок в C ++, поэтому я не уверен, что разрешено, а что нет. В то время как l oop, я пытаюсь прочитать каждую строку в файле по отдельности, и когда он попадает в строку, соответствующую записи #, предоставленной пользователем (1-100), вся эта строка будет заменена на запись, имя, количество и стоимость, которые были введены пользователем. Однако я не хочу перезаписывать весь файл, потому что пользователь должен иметь возможность вводить другой элемент впоследствии, а предыдущий должен остаться. Я знаю, что для l oop, вероятно, глуп, но я пробовал странные вещи. Я слышал о seekp и seekg, но я скорее не буду использовать классы в этом, если я все еще не могу использовать seekp и seekg и без классов.
В файле 100 записей, отформатированных аналогично этому минусу подчеркивания ( номер записи, название инструмента, количество, стоимость):
0 _____ нет _____ 0 _____ 0,00
Надеюсь, этого достаточно. Я долго боролся с этим.
void addItem(fstream& add)
{
int record = 0;
string toolName = "none";
int quantity = 0;
double cost = 0.00;
int rec = 0;
string tool = "none";
int qty = 0;
double cst = 0.0;
cout << "\nEnter the record number (1-100) : ";
cin >> record;
cout << "Enter the name of the tool: ";
cin >> toolName;
cout << "Enter the quantity of the tool: ";
cin >> quantity;
cout << "Enter the cost of the tool: ";
cin >> cost;
while (add >> rec >> tool >> qty >> cst)
{
for (int i = 0; i < 100; i++)
{
if (rec != 0) { //if existing rec# is not equal to zero, keep the line the same
add << setw(6) << rec << setw(14) << tool << setw(10)
<< qty << setw(15) << setprecision(2) << fixed << cst << '\n';
}
if (rec == record) { //if existing rec# is equal to user input, change line to user input
add << setw(6) << record << setw(14) << toolName << setw(10)
<< quantity << setw(15) << setprecision(2) << fixed << cost << '\n';
}
if (i == record) {//if line equals the value of the user input, change line to user input
add << setw(6) << record << setw(14) << toolName << setw(10)
<< quantity << setw(15) << setprecision(2) << fixed << cost << '\n';
}
else { //keep any other records as default
add << setw(6) << 0 << setw(14) << "none" << setw(10)
<< 0 << setw(15) << setprecision(2) << fixed << 0.00 << '\n';
}
}
}
cout << "\n\nYou have added a new record.\n";
}