C ++: функция автоматически использует 50 вычитать / увеличивать число ввода перед выводом - PullRequest
0 голосов
/ 16 сентября 2018

Я пытался создать программу, которая получит целочисленный ввод пользователя, а затем отфильтрует каждую цифру в этом int в четное число и нечетное число. Когда я закончил писать код, ошибки не было, но программа работала неправильно, как и должно.

Мой код:

int main() {
    int input = NULL;
    int EvenNumbering = 0;
    int OddNumbering = 0;

    cout << "Please input a number: ";
    cin >> input;

    string str = to_string(input); //Convert it to string
    std::vector<int> EvenNo(str.length());
    std::vector<int> OddNo(str.length());

    //Now filter Even number and Odd number
    for (char x : str) {
    //for (int x = 0; x < str.length();x++ ) {
        //int z = (int)str.at(x);
        int z = (int)x;
        if (z % 2 == 0) {
            EvenNo[EvenNumbering] = z;
            EvenNumbering++;
        }
        else {
            OddNo[OddNumbering] = z;
            OddNumbering++;
        }
    }
    cout << endl;
    cout << "Even Numbers: ";

    for (int x : EvenNo) {
        cout << x << ", ";
    }

    cout << endl;
    cout << "Odd Numbers: ";

    for (int x : OddNo) {
        cout << x << ", ";
    }

    cout << endl;
    system("pause");
    return 0;
}

Если я введу 1, вывод будет Odd numbers: 49 Это означает, что потребуется 50 вычесть введенный мною ввод и отобразить его.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы можете переключиться на использование unsigned char с int, чтобы получить более элегантное решение. Также push_back является распространенным способом добавления элементов в вектор неизвестной длины. В противном случае, у вас более или менее было это.

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int input = 0;

    cout << "Please input a number: ";
    cin >> input;

    string str = to_string(input); //Convert it to string
    std::vector<unsigned char> EvenNo;
    std::vector<unsigned char> OddNo;

    //Now filter Even number and Odd number
    for (unsigned char x : str) {
        if (x % 2 == 0) {
            EvenNo.push_back(x);
        }
        else {
            OddNo.push_back(x);
        }
    }
    cout << endl;
    cout << "Even Numbers: ";

    for (unsigned char x : EvenNo) {
        cout << (unsigned char)x << ", ";
    }

    cout << endl;
    cout << "Odd Numbers: ";

    for (unsigned char x : OddNo) {
        cout << x << ", ";
    }

    cout << endl;
    system("pause");
    return 0;
}
0 голосов
/ 16 сентября 2018

Проблема решена, благодаря комментарию Сэма Варшавчика.

Решение: Изменено int z = (int)x; на int z = (int)x-'0';

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