Форум программистов, компьютерный форум CyberForum.ru

Как ведет себя cin, если пользователь вводит некорректные данные? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ крестики нолики, нужен мозг http://www.cyberforum.ru/cpp-beginners/thread724353.html
1) выберите пункт меню - "Game", нажмите Enter, а потом нажмите стрелочки вверх, вниз и вылазит меню :( почему и как решить эту проблему? 2) помогите с ходами компьютера и проверкой на победу заранее большое спасибо. + может есть какие-то фейлы в коде или способ получше. критикуйте. вот код: #include <conio.h> #include <iostream> #include <windows.h>
C++ Преобразование значения переменной (long) через функцию в значения структуры Я недавно начал заниматься С++ и программированием в целом. Вот у меня такая проблема. В этой программе не работает часть, когда вводишь кол-во секунд, а с помощью функции time secs_to_time(long ss) оно должно преобразовать секунды в структуру TIME с соответствующими значениями d2.hours, d2.minutes, d2.seconds В Процедуре time secs_to_time(long ss) выдает 3 ошибки (мол не хватает точек с... http://www.cyberforum.ru/cpp-beginners/thread724344.html
C++ Смысл картинки и рекурсия изнутри
http://s018.***********/i522/1212/0b/704b04ecd185t.jpg как происходит рекурсия изнутри, что это вообще картинка показывает ?
И снова массивы (найти максимальный элемент, определить среднее арифметическое) C++
Задано 2 целочисленных массива X(n) и Z(k). В каждом массиве найти максимальный элемент массива,и если это простое число-удалить все элементы,равные максимальному значению.Определить среднее арифметическое положительных элементов массива после удаления.: Что у меня не правильно и что мне делать дальше #include <stdafx.h> #include <iostream> #include <math.h> using namespace std; int...
C++ Решение интеграла (необходимо немного изменить код) http://www.cyberforum.ru/cpp-beginners/thread724315.html
есть код, как я думал правильный (он компилируется без ошибок)! Но в итоге выдает решение интеграла равно 0, что я думаю не есть правильно, поэтому прошу помочь разобраться в ошибке. вот сам интеграл \int_{x^2+y^2}^{x^2+y^2+z^2}arctg\frac{sin(t)}{t^2+1}dt ниже привожу код программы, который необходимо исправить!заранее спасибо! #include<stdio.h> #include<conio.h> #include<math.h> float...
C++ С++. Объектно-ориентированная технология программирования. Обработка матрицы с использованием иерархии классов Характеристикой строки целочисленной матрицы называется сумма ее положительных четных элементов. Переставляя строки заданной матрицы,расположить их в соответствии с ростом характеристик. Препод откоментировал программу.. как исправить не могу разобраться.. скидываю два файла ключевых.. по которым нужна помощь.. // Печать матрицы //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Стремная... подробнее

Показать сообщение отдельно
Zzaponka
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 12
09.12.2012, 02:39     Как ведет себя cin, если пользователь вводит некорректные данные?
Читаю C++ Primer Plus by Stephen Prata. В седьмой главе у него есть следующий пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// lotto.cpp -- probability of winning
#include <iostream>
// Note: some implementations require double instead of long double
long double probability(unsigned numbers, unsigned picks);
int main()
{
    using namespace std;
    double total, choices;
    cout << "Enter the total number of choices on the game card and\n"
            "the number of picks allowed:\n";
    while ((cin >> total >> choices) && choices <= total)
    {
        cout << "You have one chance in ";
        cout << probability(total, choices);      // compute the odds
        cout << " of winning.\n";
        cout << "Next two numbers (q to quit): ";
    }
    cout << "bye\n";
    // cin.get();
    // cin.get();
    return 0;
}
 
// the following function calculates the probability of picking picks
// numbers correctly from numbers choices
long double probability(unsigned numbers, unsigned picks)
{
    long double result = 1.0;  // here come some local variables
    long double n;
    unsigned p;
 
    for (n = numbers, p = picks; p > 0; n--, p--)
        result = result * n / p ; 
    return result;
}
Условием выхода из программы есть введение символа 'q' на запрос.

С другой стороны, в тексте программы я нигде не вижу явной проверки на равенство какой-либо переменной или результата вызова какой-либо функции на равенство этому самому 'q' (проверяется только choices <= total).

Далее, если откомпилировать исходик и запустить программу, то становится ясно, что программа выходит, если вы вводите не цифры. Создав простенький пример, в котором пользователю предлагается ввести значение типа int, а он вводит какую-нибудь белиберду, и после этой самой белиберды вывести значение переменной, то оно будет равным нулю.

Собственно, после этих многабукаф(тм) сам вопрос: расскажите (или ткните, где можно прочитать) поподробнее про поведение всех этих объектов и методов класса iostream? То есть, какие сведения о них могут гарантировать, что вышеприведенная программа будет работать именно таким образом? Прата после разбора исходного текста (по крайней мере, в этом месте) об этом не упоминает...

Thanks in advance, как говорится... =)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru