• Мова С++ Цей код виводить 5 найменших за кількістю товарів. Додайте у код виведення, щоб якщо 5 і 6(або інший запис у файлі) мають однакову кількість, виводилось і 6 запис.void FiveProductLeast(const char* fn) { Handmade a, c; OutputTovar(fn); int amount = AmountTovar(fn); fopen_s(&handmade_store, fn, "r+b"); do { bool flag = false; fread(&a, sizeof(Handmade), 1, handmade_store); for (size_t i = 0; i < amount - 1; i++) { fseek(handmade_store, sizeof(Handmade) * (i + 1), SEEK_SET); fread(&c, sizeof(Handmade), 1, handmade_store); if (a.num > c.num) { fseek(handmade_store, sizeof(Handmade) * i, SEEK_SET); fwrite(&c, sizeof(Handmade), 1, handmade_store); fwrite(&a, sizeof(Handmade), 1, handmade_store); flag = true; } else { a = c; } } if (!flag) { break; } else { fseek(handmade_store, 0, SEEK_SET); } } while (true); fclose(handmade_store); Hat(); fopen_s(&handmade_store, fn, "rb"); int i = 1; while (i <= 5 && fread(&a, sizeof(Handmade), 1, handmade_store)) { cout << "| " << setw(3) << right << i++ << " " << "| " << setw(14) << left << a.code << " " << "| " << setw(26) << left << a.tovar << " " << "| " << setw(13) << left << a.category << " " << "| " << setw(17) << left << a.oznaka << " " << "| " << setw(8) << right << fixed << setprecision(3) << a.len << " " << "| " << setw(5) << right << a.num << " " << "| " << setw(17) << left << a.country << " " << "| " << setw(9) << right << setprecision(2) << a.cost << " " << " |" << endl; } Line(); fclose(handmade_store);}​

Ответы 1

  • Щоб вивести 6 запис, якщо він має однакову кількість товарів з 5 записом, потрібно змінити умову циклу while на таку:

    while ((i <= 5 || a.num == prev.num) && fread(&a, sizeof(Handmade), 1, handmade_store))

    Де prev - це змінна типу Handmade, яка зберігає попередньо прочитаний запис. Її треба оголосити перед циклом і оновлювати після кожного виведення:

    Handmade prev; while ((i <= 5 || a.num == prev.num) && fread(&a, sizeof(Handmade), 1, handmade_store)) { // виводимо a prev = a; }

  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years