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

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

Войти
Регистрация
Восстановить пароль
 
 
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
#1

Задача из книги Страуструпа - C++

05.07.2012, 13:46. Просмотров 4489. Ответов 45
Метки нет (Все метки)

Меня настораживает несколько странная формулировка, я не понимаю зачем так предлагают решать задачу:
Напишите программу, содержащую цикл while, в котором считываются и выводятся на экран два целых числа . Для выхода из программы введите символ '|'. Я как вариант написал без проверки что вводится именно 2, но чую хотели от меня что то другое!
C++
1
2
3
4
5
6
7
8
9
#include "std_lib_facilities.h"
int main()
{
    int buf = 0;
    while (cin >> buf)
        cout << buf << "\n";
 
    return 0;
}
Разумеется можно поставить счётчик, который бы отследил чтоб я ввёл только 2 но это какой то мазахизм ей богу, видимо я что то упустил...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 13:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача из книги Страуструпа (C++):

Задача из книги Страуструпа (4.6.3) - C++
Читаю книгу Страуструпа не могу понять как сортировать функцией sort. пример взят и переписан их книги: &quot;Принципы и практика...

Задача из книги Страуструпа - C++
Нужна ваша помощь или хотя бы подсказка, в одном из упражнений в книге Страуструпа &quot; Программирование. Принципы и практика с использованием...

Задача из книги Страуструпа 4 глава векторы - C++
Задача: Напишите программу, заглушающую нежелательные слова; иначе говоря, считайте слова из потока cin и выведите их в поток cout, заменив...

Задачка из книги Страуструпа... - C++
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак: &quot;Считайте последовательности чисел...

Задачка из книги Страуструпа - C++
Здравствуйте могли бы вы мне помочь в решении задачи. Вот собственно само условие. Условие: Теперь измените тело цикла так, чтобы он...

Задание из книги Страуструпа - C++
Здравствуйте! Я решил начать изучать программирование, конкретнее - язык C++. Самым логичным способом изучения мне показалось попробовать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 05:46 #16
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Ну... а самым простым решением останется
C++
1
2
3
int a,b;
scanf ("%d %d", &a,&b);
printf("%d %d", a, b);
Если не число?

Цитата Сообщение от rangerx Посмотреть сообщение
Bogdand, самое простое решение, вводить строку, и только потому переводить её в число.
Согласен. Без этого здесь не обойтись.
0
iandi
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 20
07.07.2012, 09:04 #17
А нельзя ли сделать так?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main()
{
    int a, b;
    while(std::cin >> a >> b && (a != '|' && b != '|'))
    {
        std::cout << a << b;
    }
    return 0;
}
Компилятора под рукой нет, проверить не могу...
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 10:32 #18
Цитата Сообщение от iandi Посмотреть сообщение
А нельзя ли сделать так?
Цикл прервётся, если любую букву ввести, а не только '|'.
0
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
07.07.2012, 10:38  [ТС] #19
Ну вообще страуструп, когда обьяснял ввод, показал решение программы для заполнения вектора, где ввод прерывается именно |. Он это делал так:
C++
1
while (cin >> buf)
так что я думаю '|' ненастолько критичное условие, а лишь одно из условий выхода, с таким же успехом я мог использовать и комбинацию Ctrl + D
0
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
07.07.2012, 13:37 #20
Цитата Сообщение от iandi Посмотреть сообщение
А нельзя ли сделать так?
Нельзя, даже в случаи успешной реализации у Вас не будет доступно для ввода число, что соответствует числовому значению символа "|".
0
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
07.07.2012, 14:02 #21
Цитата Сообщение от rangerx Посмотреть сообщение
Переменная x у вас не инициализирована.
Тоесть не инициализирована? Или что в разных компиляторах может быть так что х при
C++
1
int x;
не будет равняться по умолчанию нулю ?
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
07.07.2012, 15:20 #22
Aesonet, это не зависит от компилятора. Локальные переменные не инициализируются автоматически. Т.е., если не задать значение явно, то переменная будет содержать "мусор".
1
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
07.07.2012, 15:29 #23
Хм, сейчас еще раз почитаю про переменные.
Спасибо за информацию.
0
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
07.07.2012, 16:10 #24
Цитата Сообщение от Aesonet Посмотреть сообщение
не будет равняться по умолчанию нулю ?
Только статические переменные по-умолчанию равны нулю.
C++
1
static int x;
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 16:19 #25
Цитата Сообщение от Aesonet Посмотреть сообщение
не будет равняться по умолчанию нулю ?
По умолчанию - глобальные (статические с внешним связыванием), статические с внутренним связыванием и статические без связывания.
C++
1
2
3
4
5
6
7
int x;
static int y;
 
int main()
{...
static int z;
...}
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.07.2012, 17:32 #26
Предлагаю свой вариант данной задачи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int first, second;
    cout<<"Введите два целых числа по очереди (для выхода введите |):"<<endl;
    while (cin>>first, cin>>second || cin.get() != '\n')
    {
        if (!cin)
        {
            cin.clear();
            if (cin.get() == '|')
                break;
            cin.sync();
            cout<<"Должно быть целое число. Попробуйте еще: \n";
            continue;
        }
    cout<<first<<", "<<second<<endl;
    }
1
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 19:00 #27
Цитата Сообщение от yuron_477 Посмотреть сообщение
Предлагаю свой вариант данной задачи


Добавлено через 1 час 7 минут
yuron_477, если не трудно, прокоментируйте эту строчку поподробнее:
C++
1
while (cin>>first, cin>>second || cin.get() != '\n')
0
Rabbit13245
28 / 28 / 2
Регистрация: 21.04.2012
Сообщений: 282
07.07.2012, 19:08 #28
cin.get() != '|' проверяет, чтобы следующий вводимый символ был не |.

вообще cin.get() извлекает следующий символ ввода. Поправьте если не так
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.07.2012, 20:16 #29
Цитата Сообщение от alsav22 Посмотреть сообщение
прокоментируйте эту строчку поподробнее:
Ну, cin.get() != '\n' здесь для того чтоб одно из условий цыкла оставалось истинным - тогда нас не выбросит из цыкла при вводе буквы, а начнет обрабатываться следующий оператор - if (!cin). А cin>>first, cin>>second это просто выражения через оператор "запятая". Можно было бы написать
C++
1
while ((cin>>first && cin>>second) || cin.get() != '\n')
0
Aliru777
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 71
07.07.2012, 20:55 #30
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
// enter int or smth to quit.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "iostream"
#include <string>
#include <conio.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int i=0, total=0;
    string str="";
    bool z=false;
    while (!z)
        {
            if (false==cin>>i)
        {
            cin.clear();
            getline(cin,str);
            for (int j=0; j<str.size(); j++)
            {
                if ('|'==str[j])
                {
                    z=true;
                    break;
                }
            }
            str="";
            total+=i;
            i=0;
        }
        if (true==z)
            break;
    }
    cout<<total;
    getch();
    return 0;
}
это просто для ввода 1го числа - для 2х там думаю чуть подправить
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2012, 20:55
Привет! Вот еще темы с ответами:

пример из книги страуструпа - C++
struct pair { char* name; // ñòðîêà int val; // öåëîå }; const int large = 1024; ...

Достаточно ли книги Страуструпа? - C++
В общем, учу с++ по страуструпу и думаю: &quot; а хватит ли этого???&quot; . Подскажите книгу, по которой учиться дальше? Спасибо!

Библиотеки для книги Страуструпа - C++
Доброго времени суток! Дядя Бьярне использует библиотеки в своей книге &quot;Принципы и практика использования С++&quot;, которых нет в компиляторах....

Объяснить код из книги Страуструпа - C++
Здравствуйте форумчане, помогите пожалуйста со строуструповским калькулятором. В книге он определяет тип Token для хранения лексем: ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.07.2012, 20:55
Ответ Создать тему
Опции темы

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