Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

[C++] строка считывается как 0

Вася Пупкин Ученик (215), открыт 3 дня назад
Я новичок. Хотел сделать простенькую программу, которая проверяет на четность числа, которые вводит пользователь. Хочу сделать что при вводе например строки, в консоли писало что-то в духе "Введите число, а не строку!". Когда ввожу строку в консоль, она читается как нуль, поэтому при вводе строки выдает 0 - т.е. четное число. Как это исправить? подскажите

вот код:

int num;
std::cout << "Введите число: " << std::endl;
std::cin >> num;

if (num % 2 == 0) {
std::cout << "Число [" << num << "] " << "является четным" << std::endl;
}
else if (num % 2 != 0) {
std::cout << "Число [" << num << "] " << "не является четным" << std::endl;
}
else if {
std::cout << "Не является числом. Введите число";
}
5 ответов
Бабиджончик мамант Мастер (1297) 3 дня назад
5 лет учиться прогромистом, ну а станешь говночистом
Данил Ласый Просветленный (37372) 3 дня назад
if(num==0) cout<<"This is null";
как-то так
Max Dov Мастер (1753) 3 дня назад
if (std::cin>>num){
...
}
else{
std::cout << "Не является числом. Введите число";
}
если первый символ ввода не число, то будет выполняться блок else
Вася ПупкинУченик (215) 3 дня назад
что-то я не понял смысла, просто в условии инициализация, как это должно помочь
Вася Пупкин, считывание числа - это считывание всех цифр до первого нецифрового символа. Если бы вводишь буквы, то считается 0 цифр, и в переменную пойдёт число 0.
Max DovМастер (1753) 3 дня назад
мой код будет ловить такие ситуации: vmdskvds213
но если будет число перед строкой: 234324fdfdf
то он зайдет в первый блок if, а в n будет лежать 234324
Николай Веселуха Высший разум (370668) 3 дня назад
 #include <cctype> 
#include <iostream>
#include <string>

using namespace std;

bool is_integer(const string& str) {
size_t i = 0;
if (str.front() == '-') ++i;
const auto length = str.length();
while (i != length) {
if (str[i] < 0 || !isdigit(str[i])) return false;
++i;
}
return true;
}

void trim(string& str) {
size_t i = 0;
if (str.front() == '-') i = 1;
else if (str.front() == '+') {
str.erase(i, 1);
if (str.front() == '-') str = "+" + str;
}
while (str[i] == '0') str.erase(i, 1);
if (str.empty()) str = "0";
if (str.length() == 1 && str.front() == '-') str = "0";
}

string input_integer(const char* prompt = ">>> ") {
string integer;
do {
cout << ">>> ";
cin >> integer;
cin.ignore(0x1000, '\n');
trim(integer);
} while (!is_integer(integer));
return integer;
}

bool is_odd(const string& integer) {
return integer.back() & 1;
}

int main() {
const auto integer = input_integer();
cout << "<<< " << integer << ' ';
puts(is_odd(integer) ? "нечётное" : "чётное");
}
Тадасана Просветленный (41897) 8 часов назад
Попробуй так:
 bool isTrue(bool variable) { 
if (variable == true)
return true;
else if (variable == false)
return false;
else
return !true && !false;
}
Видишь ли, мой код круче кода Николая Веселухи, потому что у меня расцвечивается код нормально.
Похожие вопросы