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

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

Войти
Регистрация
Восстановить пароль
 
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
#1

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

11.03.2013, 13:34. Просмотров 852. Ответов 6
Метки нет (Все метки)

Ребят помоги создать защиту от переполнения через функцию 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,116
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
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,116
11.03.2013, 16:47     Защита от переполнения #4
Понял думаю
А использование printf и scanf обязательно?
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,116
11.03.2013, 16:53     Защита от переполнения #5
Вы про это?
Введите значение длины основания: 111111111111111111
Введите значение высоты: 55555555555555
Площадь равнобедренного треугольника = 3.08642e+30
У меня не каких ошибок не возникает
Tulosba
:)
Эксперт С++
4387 / 3230 / 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++ Флаг переполнения
C++ Избавиться от переполнения буфера (asm)
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     Защита от переполнения
Ответ Создать тему
Опции темы

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