C ++: не получен ожидаемый вывод - PullRequest
1 голос
/ 13 марта 2019

Я пытаюсь изучить код C ++ из моей учебной книги. Я написал это, используя CodeBlocks IDE:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
/*...*/
using namespace std;
/*...*/
int main (void){

    cout << "Please enter name and age: \n\n:>";
    string _sInput = "";
    int _intInput = -1;
    cin >> _sInput >> _intInput;
    cout << "Hello " << _sInput << "!\n";
    cout << "You have aged " << _intInput << " years.";
}

Основываясь на том, что обсуждалось в книге г-на Страуструпа, теперь, когда я дал переменной _intInput начальное значение, если я введу неправильные данные, такие как James Boy, я должен получить такой вывод:

Hello James!

You have aged -1 years.

Но я получаю You have aged 0 years. точно так же, как время, которое я не дал начальному значению.
Что-то не так с моим кодом или как?

Ответы [ 2 ]

2 голосов
/ 13 марта 2019
2 голосов
/ 13 марта 2019

Начиная с C ++ 11, когда чтение целого числа или числа с плавающей запятой из istream не удается, целевая переменная устанавливается на 0. См. this (cppreference.com) или this (переполнение стека. com) Подробнее об этом.

Это означает, что вы не можете использовать значение Sentinel для обнаружения ошибки синтаксического анализа, вы должны использовать, например, fail() метод , чтобы проверить, была ли какая-либо ошибка.

...