Проверка наличия нечетных цифр в числе

#c

#c

Вопрос:

Я пытаюсь создать программу, которая проверяет, все ли цифры в числе нечетные, но cout, в котором говорится, что число состоит только из нечетных цифр, отображается только в том случае, если введенное число имеет длину 1 цифра. Вот код:

 int main()
{
    int n, c;
    cin >> n;
    while (n != 0) {
        c = n % 10;
        if (c % 2 == 1) {
            n = n / 10;
            if (n == 0) {
                cout << " Number has only odd digits";
            }
        }
        else
            cout << " Number doesn't have only odd digits";
        return 0;
    }
}
  

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

1. Пожалуйста, разберитесь с отступом

2. Используйте отладчик и пошагово просматривайте код построчно, и проблема должна стать очень очевидной.

3. какой беспорядок….

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

5. Решение о том, содержит ли число только нечетные цифры, должно приниматься ВНЕ цикла. Исправьте свой алгоритм соответствующим образом.

Ответ №1:

Я рекомендую сохранить число в виде строки, а затем выполнить поиск в строке нечетных цифр:

 static const char odd_digits[] = "13579";
std::string number_as_text;
std::cin >> number_as_text;
std::string::size_type  position;
position = number_as_text.find_first_of(odd_digits);
if (position != std::string::npos)
{
  std::cout << "Number has at least one odd digit.n";
}
  

В числе в виде строки выполняется поиск любого символа из списка нечетных цифр.

Ответ №2:

Я внес минимальные изменения, чтобы сохранить ваш первоначальный ход мыслей. n=n/10 Необходимость выполнения в else случаях. Добавлена обработка случая input as 0 . Добавлен return(0) оператор при обнаружении четной цифры (продолжать нет смысла, поэтому возвращаюсь оттуда).

 int main() {    
    int n, c;
    cin >> n;

    if (n==0) {
        cout << "Number is zero. So it doesn't have only odd digits" << endl;
        return(0);
    }

    while (n != 0) {
        c = n % 10; n = n / 10;    
        cout << "n=" << n << " c=" << c << endl;

        if (c % 2 == 1) {
            if (n == 0) {
                cout << "Number has only odd digits" << endl;
            }
        }
        else {
            cout << "Number doesn't have only odd digits" << endl;
            return(0);
        }
    }
    return(0);
}
  

Ответ №3:

Ваша проблема в этих строках:

 else
    cout << " Number doesn't have only odd digits";
    return 0;
  

Компилятор интерпретирует это как:

 else {
    cout << " Number doesn't have only odd digits";
}
return 0;
  

Это означает, что он всегда выполняет return независимо от того, является ли c он нечетным или четным. Чтобы исправить это, добавьте явные фигурные скобки в ваше предложение else:

 else {
    cout << " Number doesn't have only odd digits";
    return 0;
}
  

Из-за такого рода ошибок большинство руководств по стилю требуют, чтобы вы всегда использовали фигурные скобки после if и else , даже если есть только одна строка.

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

1. Также известен как goto fail; ошибка.