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

Неизвестная конструкция - C++

Восстановить пароль Регистрация
 
Maveen
0 / 0 / 0
Регистрация: 10.03.2013
Сообщений: 1
17.03.2013, 12:42     Неизвестная конструкция #1
Задача поставлена так: Написать программу, переводящую арабские числа в римские. Задача упрощается тем, что можна считать, что 40=XXXX, 9=VIIII и тому подобное.
Саму программу я написал, но меня волнует проверка на ввод. Я ее где-то выкопал и не знаю, как она работает.

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
36
37
38
39
40
41
42
43
44
45
#include <iostream>
  #include <conio.h>
    #include <stdio.h>
using namespace std;
int roman(int i, int j, char k)
{
while(i>=j)
{
putchar(k);
i=i-j;
}
return i;
}
int main()
{
     
           int Number;   
   while(true){
        cout << "Type your number: ";
        cin >> Number;                           
        if ( (cin.peek() == '\n') & (Number>0)){           
            cin.get();                      
            break;
        }
        else{
            cout <<"You have typed wrong number, type it again:"<<endl;
            cin.clear();                    
            while (cin.get() != '\n'){}     
        }  
    
    fflush(stdin);
}    
 cout << "Transformed number into Roman system:\n";
                        Number=roman(Number,1000,'M');
                        Number=roman(Number,500,'D');
                        Number=roman(Number,100,'C');
                        Number=roman(Number,50,'L');
                        Number=roman(Number,10,'X');
                        Number=roman(Number,5,'V');
                        Number=roman(Number,1,'I');   
    cout <<"\n";
   
    getch ();
    return 0;
}

меня волнует эта часть. Можете разжевать ее, кто в теме?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  int Number;   
   while(true){
        cout << "Type your number: ";
        cin >> Number;                           
        if ( (cin.peek() == '\n') & (Number>0)){           
            cin.get();                      
            break;
        }
        else{
            cout <<"You have typed wrong number, type it again:"<<endl;
            cin.clear();                    
           while (cin.get() != '\n'){}     
        }  
    
    fflush(stdin);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 12:42     Неизвестная конструкция
Посмотрите здесь:

C++ неизвестная функция
Неизвестная функция C++
C++ неизвестная ошибка
Неизвестная функция. Книга. Страуструп C++
C++ Неизвестная ошибка с++
Неизвестная ошибка C++
C++ Неизвестная ошибка
Неизвестная мне ошибка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.03.2013, 13:39     Неизвестная конструкция #2
Это:
C++
1
2
 cin.clear();                    
           while (cin.get() != '\n'){}
Сброс флага ошибки и очистка птока ввода(cin.get() будет извлекать по символу из потока пока не встретит '\n'. Его тоже извлечёт). После этого поток ввода чист и готов к работе.

Добавлено через 4 минуты
Первая часть кода: после нажатия Enter проверяется, есть ли в потоке, между последней цифрой и '\n' (Enter), не цифры (если да, то cin.peek() не равен '\n') и положительно ли введённое число. Если всё правильно, то '\n' извлекается из потока (cin.get())(чтобы дальше не мешал) и выход из цикла ввода.

Добавлено через 4 минуты
Только вместо & нужно && писать.
Yandex
Объявления
17.03.2013, 13:39     Неизвестная конструкция
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru