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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
#1

Вылавливание(или как это ещё назвать?:) буквы из строки - C++

15.03.2013, 01:56. Просмотров 2841. Ответов 11
Метки нет (Все метки)

Всем привет, я ещё новичок и на форуме и в с++, препод дал такое задание:
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
#include <stdio.h>;
#include <conio.h>;
#include <iostream>;
#include <math.h>;
using namespace std;
int triangle(int,int,int);
main()
{float a,b,c,p,s;
int i;
      cout <<"Enter sides of triangle"<<endl;
      cin.clear();
      cin >>a>>b>>c;
      i=(a+b>c)&&(b+c>a)&&(a+c>b);
      cin.sync();
      if(i) { cout<<"Triangle exists"<<endl;
      p=(a+b+c)/2;
      s=sqrt(p*(p-a)*(p-b)*(p-c));
      cout <<"P="<<a+b+c<<endl;
      cout <<"S="<<s<<endl;
      cout <<"h(a)="<<2*s/a<<endl;
      cout <<"h(b)="<<2*s/b<<endl;
      cout <<"h(c)="<<2*s/c<<endl;
      cout <<"m(a)="<<sqrt(2*b*b+2*c*c-a*a)/2<<endl;
      cout <<"m(b)="<<sqrt(2*a*a+2*c*c-b*b)/2<<endl;
      cout <<"m(c)="<<sqrt(2*b*b+2*a*a-c*c)/2<<endl;
      cout <<"B(a)="<<(2/(b+c))*sqrt(b*c*p*(p-a))<<endl;
      cout <<"B(b)="<<(2/(a+c))*sqrt(a*c*p*(p-b))<<endl;
      cout <<"B(c)="<<(2/(a+b))*sqrt(a*b*p*(p-c))<<endl;
      }
      else cout <<"Triangle not exists"<<endl;
   getch();
   return(0);
      }
при вводе чисел, если ввести после 3-его числа букву- то всё-равно всё считает, хотя и не должно, так вот, как мне выловить последнюю букву? надеюсь, я понятно обьяснил))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 01:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вылавливание(или как это ещё назвать?:) буквы из строки (C++):

Что это? Как правильно назвать? - C++
const int T_height = 36; const int T_width = 2; const std::string Table = { { &quot;a&quot;,&quot;letter&quot; }, { &quot;b&quot;,&quot;letter&quot; }, { &quot;c&quot;,&quot;letter&quot;...

Есть ли в std, или где-нибудь ещё, константа для пустой строки (""), как endl (\n) для символа переноса? - C++
Раздражает писать так: return &quot;&quot;;

Можно ли это назвать пузырьковой сортировкой? - C++
int last = arraySize-1; while (last &gt; 0) { int max = last; for (int i = 0; i &lt;= last; i++) if (sort &gt; sort) max...

Дан текст. Выяснить или есть он индетификатором. Индетификатор - это последовательность букв и цифр, которые начинаются с буквы. - C++
Дан текст. Выяснить или есть он индетификатором. Индетификатор - это последовательность букв и цифр, которые начинаются с буквы. как...

Отображается след(или как это ещё назвать) от окон на рабочем столе.(Скриншот прилагается) - Windows XP
Вот как то так:

Как это назвать или где почитать как это сделать? - HTML, CSS
Вот как выглядит моя цель - http://cs623921.vk.me/v623921477/38005/2W46UJsY3nM.jpg При нажатии на стрелки происходит плавный переход. ...

11
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 02:13 #2
C++
1
2
3
4
5
6
7
8
9
cout << "Enter sides of triangle" << endl;
while (true)
{
    cin >> a >> b >> c;
    if (cin.peek() == '\n') break;
    cin.clear();
    while (cin.get() != '\n'); 
    cout <<"Enter sides of triangle"<<endl;
}
1
Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
15.03.2013, 02:39  [ТС] #3
спасибо большое, но я не совсем понимаю, что делают
C++
1
(cin.peek() == '\n') ;
и
C++
1
(cin.get() != '\n')
если не сложно, не мог бы ты описать в 2-х словах?)

Добавлено через 19 минут
Блин, я так понял, тут редактировать сообщения нельзя?) ну ладно, напишу новое) я вот+- разобрался, вот только не понял, почему используем peek, если заменить его на get, то ничего не изменится?)
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 02:45 #4
Цитата Сообщение от Stonerider Посмотреть сообщение
(cin.peek() == '\n') ;
Смотрит следующий символ в потоке, не извлекая его.

Добавлено через 33 секунды
Цитата Сообщение от Stonerider Посмотреть сообщение
(cin.get() != '\n')
Очищает поток после ошибки.

Добавлено через 2 минуты
Цитата Сообщение от Stonerider Посмотреть сообщение
если заменить его на get, то ничего не изменится?
По идее, нет. Даже может и лучше.

Добавлено через 1 минуту
Часто это '\n', который остаётся после рабоы cin >> , дальше в коде проблемы создаёт (не в этом коде).
1
Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
15.03.2013, 02:47  [ТС] #5
Спасибо ещё раз, заменил- разницы вообще никакой вот почти всё понял, только вот сам механизм проверки ещё не до конца понял... то есть он проверяет совпадает ли строка, которая была введена в cin с той, что считало?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 03:04 #6
Тут не строки вводятся, а числа. cin >> ждёт ввода числа ( в данном слуыае трёх, чем то разделённых). Считывает одно число до (напрмер, пробела), второе, третье. Третье он будет считывать, пока не встретится или пробельный символ (в том числе и '\n'), или не цифра. Потом в коде проверка: что после третьего числа в потоке осталось. cin.get() извлекает это что-то. Если там '\n' (попадает в поток после нажатия Enter), то значит всё правильно и происходит выход из цикла. Если там не '\n', а, например, буква (или пробел), то сбрасывается флаг ошибки (на всякий случай, может и не быть), чтобы поток заработал, очищается поток от лишнего, и переход к новому вводу.
1
Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
15.03.2013, 03:07  [ТС] #7
Что бы я без тебя делал?) ещё раз спасибо и за код, и ещё больше благодарности- за понятное объяснение! удачи и спокойной ночи)
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 03:11 #8
Ещё можно проверку так сделать:
C++
1
if (cin.peek() == '\n' || cin.peek() == ' ' || cin.peek() == '\t') break;
Чтобы ввод считался правильным, если за последним числом пробельный символ. Но это решает программист, что ему нужно, так и делает.
1
Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
22.03.2013, 01:15  [ТС] #9
Что бы не создавать новую тему, хочу спросить здесь:
Как просмотреть, что выдаёт строка while (cin.get() != '\n'); при вводе 12r7 например? (препод дал такое задание)
насколько я понял- нужно юзать брикпоинты, но я не понимаю, что именно делать (у меня код блокс, ставлю брикпоинт на эту строку и программа всё так же работает, без никаких остановок или ещё чего-то)...
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.03.2013, 03:01 #10
Если так написать, то можно увидеть:
C++
1
while ((n = cin.get()) != '\n') cout << (char)n << endl;
Добавлено через 4 минуты
По поводу Code::Blocks - только это: Code::Blocks мульки с дебагом
0
Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
22.03.2013, 03:17  [ТС] #11
alsav22, неа, ничего не происходит, программа всё так же выполняется, даже пустая строка не появляется...
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.03.2013, 18:00 #12
Цитата Сообщение от Stonerider Посмотреть сообщение
alsav22, неа, ничего не происходит, программа всё так же выполняется, даже пустая строка не появляется...
Это про Code::Blocks или про что?
0
22.03.2013, 18:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 18:00
Привет! Вот еще темы с ответами:

Факсация объектов или как это назвать - Delphi
Вот оттяните свой браузер от краёв окна и кнопки и edit станет маленьким обратно приклеите он опять растянется под экран. Как сделать...

Построение графа (узлов, или как вообще это назвать?) - Геометрия
Всем привет! В геометрии я получал в школе двойки, но, впринципе, мне пока это не мешает. Хотя, есть следующая проблема... прошу...

подскажите на чем лучше(и проще) реализовать подобие "эквалайзера" - "микшерного пульта" или как это еще назвать - JavaScript
Реально ли создать подобное на базе html? p.s. картинка прилогаеться

Как вытащить число или буквы из строки где буквы с цифрами - PHP
Столкнулся с такой особенностью. Не могу понять в чём дело, может просто недопонимают синтаксиса Reg.Exp. // Дано: // Строки...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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