Почему деление с помощью массивов генерирует случайное число?

#c #arrays #input

#c #массивы #ввод

Вопрос:

Итак, вот мой код

 #include <conio.h>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{
    int n;
    int kw[10];
    int discount[10];
    int total[10];
    int final[10];

    cout << "insert amount of data = ";
    cin >> n;
    cout << endl;
    for (int i = 0; i < n; i  ) {
        cout << "insert total = ";
        cin >> total[i];
        cout << "insert kw (1, 2, or 3)= ";
        cin >> kw[i];

        if (kw[i] < 1 || kw[i] > 3) {
            do {
                cout << "please insert the number 1-3n";
                cout << "insert kw (1, 2, or 3)= ";
                cin >> kw[i];
            } while (kw[i] < 1 || kw[i] > 3);

            if (kw[i] == 1) {
                discount[i] = 2 * total[i] / 100;
            }

            else if (kw[i] == 2) {
                discount[i] = 5 * total[i] / 100;
            }

            else
                discount[i] = 10 * total[i] / 100;
        }
        final[i] = total[i] - discount[i];
        cout << discount[i] << endl;
        cout << final[i] << endl;
    }
}
 

Предполагается, что этот код определяет, сколько раз пользователь запустит программу, возьмет число, введенное пользователем, установит скидку, а затем вычислит конечное значение.

Проблема в том, что конечным результатом всегда является случайное число. Например, если я введу 5000 для total[i] и 3 для kw[i] ( kw[i] используется для установки скидки), я получу результат:

 6299760                                                                                                      
-6294760
 

Хотя я ожидал получить:

 500
4500
 

Итак, как я могу это исправить, чтобы получить правильное значение?

Комментарии:

1. Ваш код может легко пойти наперекосяк с правильным / неправильным вводом, пожалуйста, включите все входные и выходные данные.

2. Вы не устанавливаете скидку, если они получают право kw с первой попытки.

3. Основываясь на комментарии @stark, если вы обнаружите, что пишете if(condition){ do{ ...} while(condition) } , вы, вероятно, просто хотите while цикл вместо do while цикла.

4. Кроме того, найдите в своей любимой ссылке C «целочисленное деление». Ваши discount вычисления будут равны нулю, если числитель меньше знаменателя, например, 3/4 == 0.

Ответ №1:

Вы вычисляете discount , только если пользователь сначала вводит неправильное значение для kw , а затем вводит правильное.