Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
 Аватар для Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17

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

15.03.2013, 01:56. Показов 4132. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2013, 01:56
Ответы с готовыми решениями:

нужен срипт или как это еще назвать /оплата wmz
Например в документе текстовый документ такого формата : №1111 насос купил пылесос рвшо ш оошо о шо шо шогнн шош о №2222 насос...

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

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

11
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 02:13
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  [ТС]
спасибо большое, но я не совсем понимаю, что делают
C++
1
(cin.peek() == '\n') ;
и
C++
1
(cin.get() != '\n')
если не сложно, не мог бы ты описать в 2-х словах?)

Добавлено через 19 минут
Блин, я так понял, тут редактировать сообщения нельзя?) ну ладно, напишу новое) я вот+- разобрался, вот только не понял, почему используем peek, если заменить его на get, то ничего не изменится?)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 02:45
Цитата Сообщение от 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  [ТС]
Спасибо ещё раз, заменил- разницы вообще никакой вот почти всё понял, только вот сам механизм проверки ещё не до конца понял... то есть он проверяет совпадает ли строка, которая была введена в cin с той, что считало?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 03:04
Тут не строки вводятся, а числа. cin >> ждёт ввода числа ( в данном слуыае трёх, чем то разделённых). Считывает одно число до (напрмер, пробела), второе, третье. Третье он будет считывать, пока не встретится или пробельный символ (в том числе и '\n'), или не цифра. Потом в коде проверка: что после третьего числа в потоке осталось. cin.get() извлекает это что-то. Если там '\n' (попадает в поток после нажатия Enter), то значит всё правильно и происходит выход из цикла. Если там не '\n', а, например, буква (или пробел), то сбрасывается флаг ошибки (на всякий случай, может и не быть), чтобы поток заработал, очищается поток от лишнего, и переход к новому вводу.
1
 Аватар для Stonerider
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 17
15.03.2013, 03:07  [ТС]
Что бы я без тебя делал?) ещё раз спасибо и за код, и ещё больше благодарности- за понятное объяснение! удачи и спокойной ночи)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2013, 03:11
Ещё можно проверку так сделать:
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  [ТС]
Что бы не создавать новую тему, хочу спросить здесь:
Как просмотреть, что выдаёт строка while (cin.get() != '\n'); при вводе 12r7 например? (препод дал такое задание)
насколько я понял- нужно юзать брикпоинты, но я не понимаю, что именно делать (у меня код блокс, ставлю брикпоинт на эту строку и программа всё так же работает, без никаких остановок или ещё чего-то)...
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.03.2013, 03:01
Если так написать, то можно увидеть:
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  [ТС]
alsav22, неа, ничего не происходит, программа всё так же выполняется, даже пустая строка не появляется...
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.03.2013, 18:00
Цитата Сообщение от Stonerider Посмотреть сообщение
alsav22, неа, ничего не происходит, программа всё так же выполняется, даже пустая строка не появляется...
Это про Code::Blocks или про что?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.03.2013, 18:00
Помогаю со студенческими работами здесь

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

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

Подлогин или поддомен. Не знаю как это назвать
Как мне сделать, например, на странице tipo-learn.ru/news выводились новости списком, допустим, а сами новости, по клику, были...

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

Чтение из файла. Почему выравнивание по ширине ? Или как это назвать
class Formulation //постановка задачи { public: void Instruction() { string path =...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru