Ввод чисел, если не введено число 0. Затем проверяем, делятся ли введенные числа с числом n (C ++) - PullRequest
0 голосов
/ 25 апреля 2020

Как видно из заголовка, я пытаюсь ввести цифры, если не введу число 0. У меня проблема в том, что я ввожу числа для l oop и с массивом. Фактическая проблема заключается в том, что я ввожу цифры, если только «i» не достигнет числа 100 (как видно из кода). Даже если я введу число 0, это ничего не делает. Я новичок в C ++, поэтому, если вы не понимаете код или я поступаю совершенно неправильно с этим, пожалуйста, помогите мне.

#include <iostream>

using namespace std;

int main() {
    int n; 
    int number[100];

    for (int i = 0; i < 100; i++)
    {
        if (number[i] != 0)
        cin >> number[i];
    }

    cout << "Enter number n: ";
    cin >> n;
    for (int i = 0; i < 100; i++)
    {
        if (number[i] % n == 0)
        cout << number[i];
    }

    return 0;
}

Вывод - это просто ввод чисел, как я сказал в начале. PS: я могу использовать все, что захочу (векторы, функции ...)

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Не уверен, правильно ли я интерпретирую ваш код, но у вас логика c в обратном порядке:

for (int i = 0; i < 100; i++)
{
    if (number[i] != 0)
    cin >> number[i];
}

Здесь вы проверяете на 0, прежде чем читать ввод пользователя. Вместо этого вы должны сначала прочитать ввод и только потом проверить, было ли оно 0 (и вы никогда не должны пытаться получить доступ к чему-либо до его инициализации, как в случае с вашим массивом number).

Для массивов динамического размера вы можете использовать std::vector:

std::vector<int> numbers;
int number;
while ( std::cin >> number && number != 0) {
    numbers.push_back(number);
}

Это также остановится, когда пользователь введет что-то, что не может быть прочитано как int, и после этого l oop numbers.size() сообщает, сколько цифр было введено.

1 голос
/ 25 апреля 2020

Серьезной проблемой является проверка, которая у вас есть:

if (number[i] != 0)

Это серьезная проблема, поскольку она выполняется до , когда вы инициализируете что-либо в number[i], когда его значение равно неопределенный . А использование неопределенных значений приводит к неопределенному поведению в вашей программе.

Если вы хотите пропустить нули во входных данных, вам нужно прочитать во временную переменную и проверьте, если , что значение равно нулю или нет.

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

Возможно, что-то вроде этого:

size_t count = 100;

// Loop while we have still have numbers to input
while (count > 0)
{
    int temp;

    // Read a number from the user
    std::cin >> temp;

    // If it's not zero, then add it to the array, else just ignore it
    if (temp != 0)
    {
        // 100 - count will result in the index where the number is added to the array
        input[100 - count] = temp;

        // One less number to read
        --count;
    }
}

Есть, конечно, лучшие решения, чем показано выше, но, надеюсь, оно должно быть более понятным, а также не использовать ничего, что вы не могли бы учили еще.

...