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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
#1

Нуждаюсь в объяснении функций - C++

25.03.2014, 17:29. Просмотров 380. Ответов 10
Метки нет (Все метки)

Кто может человеческим языком, объяснить что делают эти функции:
  1. cin.peek()
  2. cin.clear()
  3. cin.get()
  4. getch()
Интересует и "научное" пояснения.
п.с. может посоветуйте книгу, в которой понятно описывают функции С++.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12698 / 7172 / 800
Регистрация: 27.09.2012
Сообщений: 17,683
Записей в блоге: 2
Завершенные тесты: 1
25.03.2014, 17:34     Нуждаюсь в объяснении функций #2
http://www.cplusplus.com/reference/i.../istream/peek/
http://www.cplusplus.com/reference/ios/ios/clear/
http://www.cplusplus.com/reference/istream/istream/get/
http://msdn.microsoft.com/ru-ru/library/078sfkak.aspx
andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
25.03.2014, 17:42  [ТС]     Нуждаюсь в объяснении функций #3
Это типа человеческий язык? Даже не на русском)))
Croessmah
Модератор
Эксперт CЭксперт С++
12698 / 7172 / 800
Регистрация: 27.09.2012
Сообщений: 17,683
Записей в блоге: 2
Завершенные тесты: 1
25.03.2014, 17:45     Нуждаюсь в объяснении функций #4
Цитата Сообщение от andreyananas Посмотреть сообщение
Это типа человеческий язык?
Ну можете в бинарном виде коды символов посмотреть и сравнить с предложенным вариантом.
Цитата Сообщение от andreyananas Посмотреть сообщение
Даже не на русском)))
человеческие языки русским не ограничиваются, если Вы не в курсе
Brust
35 / 29 / 8
Регистрация: 16.07.2012
Сообщений: 68
26.03.2014, 05:00     Нуждаюсь в объяснении функций #5
Даже не на русском..

А без примитивных знаний английского или хотя бы умением пользоваться переводчиком, в программировании увы делать нечего )
andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
26.03.2014, 16:41  [ТС]     Нуждаюсь в объяснении функций #6
Цитата Сообщение от Brust Посмотреть сообщение
А без примитивных знаний английского или хотя бы умением пользоваться переводчиком, в программировании увы делать нечего )
Я это все понимаю, тем не менее, будьте добры, объяснить.

Добавлено через 34 минуты
C++
1
2
3
4
5
6
7
while (!(cin >> b) || (cin.peek() != '\n') || (b <= 0))
                    {
                        cin.clear();
                        while (cin.get() != '\n');
                        cout << "Error enter!\n";
                        cout << "to begin again, press any key...\n";
                    }
Объясните подробно, по пунктам, как работает этот код. И в частности функции которые в нем.
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.03.2014, 16:42     Нуждаюсь в объяснении функций #7
cin.peek() - возвращает следующий символ из входного потока, на вынимая его оттуда.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
 
int main(){
    char c;
    while((c=cin.peek()) != 'q')
        cin.get(c);
    cout << "You entered 'q'. The next character is ";
    cin.get(c);
    cout << c << endl;
 
    std::cin.get();
    std::cin.get();
    return 0;
}
2. cin.clear() - проверяет состояние потока. Если вы ввели не то значение, позволяет очистить поток и ввести другое значение.

C++
1
void clear (iostate state = goodbit);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    int a;
    while (a != 0){
        std::cout << "A = ";
        while(!(std::cin>>a)){
            std::cin.clear();
            while (std::cin.get() != '\n')
                continue;
            std::cout << "Please A = ";
        }
    }
    return 0;
}
3. cin.get() - http://ru.cppreference.com/w/cpp/io/get
4. getch() - http://hashcode.ru/questions/59820/c...ботать-с-getch
andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
26.03.2014, 17:00  [ТС]     Нуждаюсь в объяснении функций #8
C++
1
2
3
4
5
6
7
while (!(cin >> b) || (cin.peek() != '\n') || (b <= 0))
                    {
                        cin.clear();
                        while (cin.get() != '\n');
                        cout << "Error enter!\n";
                        cout << "to begin again, press any key...\n";
                    }
Цитата Сообщение от recoder Посмотреть сообщение
cin.peek() - возвращает следующий символ из входного потока, на вынимая его оттуда.
то есть она возвращает символ из входного потока пока это будет не перевод строки '\n'?
Зачем это делать в этом коде?
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.03.2014, 17:29     Нуждаюсь в объяснении функций #9
C++
1
while (!(cin >> b) || (cin.peek() != '\n') || (b <= 0))
- Некорректный ввод или входной символ не равен '\n' или b <= 0.
C++
1
cin.clear();
- Сбрасываем поток
C++
1
while (cin.get() != '\n');
- Читаем оставшиеся символы в потоке
C++
1
2
cout << "Error enter!\n";
cout << "to begin again, press any key...\n";
- выводим сообщения.

Этот код позволяет вводить данные, если вы ввели что то некорректно, в другом случае программа бы работала некорректно(просто закрывалась). Ничего больше сказать не могу, так как вы не предоставили весь код программы.
andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
26.03.2014, 17:44  [ТС]     Нуждаюсь в объяснении функций #10
Вот мне не понятен путь от cin.peek() к cin.clear()
п.с. та суть именно в этом коде, то что он делает я знаю, я не понимаю как он это делает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 18:00     Нуждаюсь в объяснении функций
Еще ссылки по теме:

Шаблоны функций C++
C++ Рекурсия функций
C++ Друзья, я нуждаюсь в советах
шаблоны функций C++
C++ Нуждаюсь в решения уравнения 2A+3B+4C+5D в с++

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

Или воспользуйтесь поиском по форуму:
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.03.2014, 18:00     Нуждаюсь в объяснении функций #11
C++
1
!(cin >> b)
- Некорректный ввод. Например, вместо числа строку вводим.
C++
1
cin.peek() != '\n'
- Если считали перевод строки, оставляем его во входном потоки.
C++
1
b <= 0
- Если b < 0 или b = 0

C++
1
!(cin >> b) || (cin.peek() != '\n') || (b <= 0)
- Здесь должно выполнится одно из 3 условий. И если одно из них истина то, мы очищаем поток, что бы возможно после цикла что то могли вывести или ввести.
Yandex
Объявления
26.03.2014, 18:00     Нуждаюсь в объяснении функций
Ответ Создать тему
Опции темы

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