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

Защита от переполнения - C++

Восстановить пароль Регистрация
 
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
11.03.2013, 13:34     Защита от переполнения #1
Ребят помоги создать защиту от переполнения через функцию scanf_s и убрать нолики в конечном ответе, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <iostream>
int main ()
{
setlocale(0, "rus");
float b, h, s;
printf("Введите значение длины основания: ");
 while (!scanf("%f", &b) || getchar() != '\n')
    { 
        printf("Ошибка\n Попробуйте еще раз: ");
        fflush (stdin);
    } 
printf("Введите значение высоты: ");
 while (!scanf("%f", &h) || getchar() != '\n')
    {
        printf("Ошибка\n Попробуйте еще раз: ");
        fflush (stdin);
    } 
printf("Площадь равнобедренного треугольника = %f\n",s=(b*h)/2);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 13:34     Защита от переполнения
Посмотрите здесь:

C++ проверка переполнения double
39+ (-39) будет ли установлен флаг переполнения? C++
СИ++ и контроль переполнения C++
C++ Ошибка переполнения буфера
C++ Ошибка переполнения массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
11.03.2013, 16:39     Защита от переполнения #2
брать нолики в конечном ответе
Замените
C++
1
printf("Площадь равнобедренного треугольника = %f\n",s=(b*h)/2);
на
C++
1
printf("Площадь равнобедренного треугольника = %g\n",s=(b*h)/2);
%g если число 25.0000 то отобразит 25, если число 3.654 то отобразит 3.654

помоги создать защиту от переполнения
О каком переполнении идет речь ?
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
11.03.2013, 16:47  [ТС]     Защита от переполнения #3
Цитата Сообщение от egor2116 Посмотреть сообщение
Замените
C++
1
printf("Площадь равнобедренного треугольника = %f\n",s=(b*h)/2);
на
C++
1
printf("Площадь равнобедренного треугольника = %g\n",s=(b*h)/2);
%g если число 25.0000 то отобразит 25, если число 3.654 то отобразит 3.654
С этим уже разобрался, ты лучше с защитой помоги буду благодарен)

Добавлено через 7 минут
egor2116
Ну вот например чтобы если вводишь больше 10 символов то выдавал ошибку что мол переполнение или на максимальное количество символов которое поддерживает float
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
11.03.2013, 16:47     Защита от переполнения #4
Понял думаю
А использование printf и scanf обязательно?
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
11.03.2013, 16:53     Защита от переполнения #5
Вы про это?
Введите значение длины основания: 111111111111111111
Введите значение высоты: 55555555555555
Площадь равнобедренного треугольника = 3.08642e+30
У меня не каких ошибок не возникает
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.03.2013, 16:53     Защита от переполнения #6
Цитата Сообщение от MishkaSh Посмотреть сообщение
Ну вот например чтобы если вводишь больше 10 символов
Значит и читать надо посимвольно. См. putback() и get() для std::istream
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2013, 17:14     Защита от переполнения
Еще ссылки по теме:

C++ Отлов исключения переполнения буфера
C++ Флаг переполнения
C++ Как отловить переполнения?

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

Или воспользуйтесь поиском по форуму:
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
11.03.2013, 17:14  [ТС]     Защита от переполнения #7
Цитата Сообщение от egor2116 Посмотреть сообщение
Понял думаю
А использование printf и scanf обязательно?
Да обязательно

Добавлено через 34 секунды
Цитата Сообщение от egor2116 Посмотреть сообщение
Вы про это?


У меня не каких ошибок не возникает
Нет нужно чтобы если я ввожу больше 10 символов то выдавал ошибку

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Значит и читать надо посимвольно. См. putback() и get() для std::istream
Это для sin и cout, а мне надо для printf и scanf

Добавлено через 3 минуты
Вот к примеру double поддерживает 256 символов. Вот мне нужно чтобы если я введу больше чем 256 символов(не знаю сколько для float) чтоб выдавал ошибку и мол писал введите заново
Yandex
Объявления
11.03.2013, 17:14     Защита от переполнения
Ответ Создать тему
Опции темы

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