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

Защита от дурака - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
19.02.2013, 06:28     Защита от дурака #1
Вот только начал изучать С++ помогите составить защиту от дурака пожалуйста, вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main ()  {
    setlocale(0, "rus");
    double A;
    double Z;
    double U;
 
cout<<"Введите значение числа A\n";
cin>>A;
 
cout<<"Введите значение числа Z\n";
cin>>Z;
 
cout<<"U=";
 
cout<<(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z)   <<"\n";
 
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
19.02.2013, 08:20  [ТС]     Защита от дурака #21
Цитата Сообщение от UVEN Посмотреть сообщение
У меня программа работает, код читает без ошибки ).. Какие ошибки выдает у тебя ?..
Ты про какую программу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UVEN
3 / 3 / 0
Регистрация: 19.02.2013
Сообщений: 26
19.02.2013, 08:21     Защита от дурака #22
Твоя программа )...
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
19.02.2013, 08:39  [ТС]     Защита от дурака #23
Цитата Сообщение от UVEN Посмотреть сообщение
Твоя программа )...
Ну моя то работает, а вот как в ней проверку данных сделать?
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,453
19.02.2013, 21:05     Защита от дурака #24
Скорее всего лазейки найдутся, но как вариант.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string>
#include <ctype.h>
#include <sstream>
 
using namespace std;
 
double string_to_double( const std::string& s )
 {
   std::istringstream i(s);
   double x;
   if (!(i >> x))
     return 0;
   return x;
 } 
 
 
double Foo(string &s)
{ 
    string temp=""; 
    int count=0;    
    
        
    for (int i=0;i<s.size();i++) 
    {
        if ( (i>0)&&(s[i]=='.')&&(!count)) count=i-1;
        if ((s[i]>='0')&&(s[i]<='9')) temp.push_back(s[i]);     
    }   
 
    if (count) temp.insert(count,1,'.');
    if (s[0]=='-') temp.insert(0,1,'-');
    
 
    if (s.size()!=temp.size())  return 1;
    else return 0;
 
}
 
 
void input(double &x,char Name)
{
    string ch="";
   double correct=10;
    while (correct)
   {
    cout<<"Введи "<<Name<<"   ";
     cin>>ch;
     correct=Foo(ch);
     if (correct) cout<<"Некорректный ввод\n\n";
     else x=string_to_double(ch);
   }
}
    
 
int main(void)
{   
   
   double A=0,Z=0,U=0;
   
   input(A,'A'); //Предлагаешь ввести A
   input(Z,'Z'); //Предлагаешь ввести Z
   input(U,'U'); //Предлагаешь ввести U
   
  
 
   cout<<"\n";
   cout<<"A = "<<A<<"\n";
   cout<<"U = "<<U<<"\n";
   cout<<"Z = "<<Z<<"\n";
   cout<<"Сумма = "<<A+U+Z<<"\n\n"; //Подставляй своё выражение (здесь сумма)
   cout<<(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z)   <<"\n";//Вот твоё
   
 
system("PAUSE");
return 0;
}
Lemm_Leto
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19
19.02.2013, 23:37     Защита от дурака #25
а состояние потока использовать не торт?
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
20.02.2013, 08:27  [ТС]     Защита от дурака #26
Еще хотел спросить как поставить ограничение на количество вводимых символов?
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
20.02.2013, 08:40     Защита от дурака #27
Цитата Сообщение от MishkaSh Посмотреть сообщение
Еще хотел спросить как поставить ограничение на количество вводимых символов?
cin.getline
там параметры
куда считать, сколько и символ конца какой использовать
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,453
20.02.2013, 10:22     Защита от дурака #28
MishkaSh, в моем коде можно так.
одна функция слегка изменена и сам ввод стал другим
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void input(double &x,char Name,int size)
{
    string ch="";
   double correct=10;
    while (correct)
   {
    cout<<"Введи "<<Name<<"   ";
     cin>>ch;  
     correct=Foo(ch);
     if (correct) cout<<"Некорректный ввод\n\n";
     else if (ch.size()>size) {correct=1; cout<<"Слишком много символов, повторите ввод\n\n";}
     else x=string_to_double(ch);
   }
}
При вводе большего числа символов чем нужно, об этом сообщается и требуется повторить ввод.
C++
1
2
3
   input(A,'A',3); //Предлагаешь ввести A (ограничение 3 символа)
   input(Z,'Z',4); //Предлагаешь ввести Z (ограничено 4 символа)
   input(U,'U',5); //Предлагаешь ввести U (ограничено 5 символов)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 12:27     Защита от дурака
Еще ссылки по теме:

Защита от дурака (пустое значение в названии) C++
C++ Защита от дурака
C++ защита от дурака как сделать?
C++ Защита от дурака
C++ Защита от дурака

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

Или воспользуйтесь поиском по форуму:
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
20.02.2013, 12:27  [ТС]     Защита от дурака #29
Цитата Сообщение от Tiva Посмотреть сообщение
cin.getline
там параметры
куда считать, сколько и символ конца какой использовать
Как через cin.getline сделать?

Добавлено через 6 минут
Вот сам код:
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
#include <iostream>
using namespace std;
 
int main () 
{
setlocale(0, "rus");
double A;
double Z;
double U;
char name[10], title[10];
cout<< "Введите значение числа A\n";
while (!(cin>>A) || cin.get()!='\n')
{
cout<<"Ошибка, попробуйте еще раз\n";
cin.clear();
cin.sync();
cout<<"Введите значение числа A\n";
}
 
cout<<"Введите значение числа Z\n";
while (!(cin>>Z) || cin.get()!='\n')
{
cout<<"Ошибка, попробуйте еще раз\n";
cin.clear();
cin.sync();
cout<<"Введите значение числа Z\n";
}
 
cout<<"U=";
 
cout<<(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z) << "\n";
 
 
return 0;
}
Добавлено через 16 минут
И вот в этом коде через cin.getline нужно сделать ограничение на количество вводимых символов в double
Yandex
Объявления
20.02.2013, 12:27     Защита от дурака
Ответ Создать тему
Опции темы

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