#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;
ошибка.