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

C++ проверка ввода - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
kir_
11 / 6 / 1
Регистрация: 19.02.2010
Сообщений: 77
25.03.2010, 13:37     C++ проверка ввода #1
Ребят помогить пожалуста разобраться не работает чертова проверка ввода я в коментарии вынес текст ошибки гляньте ...

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
// laba1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "iostream"
#include "stdlib.h"
#include "math.h"
using namespace std;
 
double prov()
{
    double b1;
    char a1,*ost;
    do{
    cout<<"vvedite 4islo \n";
     cin>>a1;
     b1=strtod(a1,&ost); 
//Ошибка    1   error C2664: strtod: невозможно преобразовать параметр 1 из 'char' в 'const char *' c:\users\kir_\documents\visual studio 2008\projects\laba1\laba1.cpp 18
//если b1=strtod(&a1,&ost); то строка ниже не работает, судя по всему? преобразование не работает...
         if (*ost!=NULL){cout<<"ne vernbIi vvod \n";};
     }
    while(*ost=NULL);
    return b1;
}
void main()
{ int i=0, c=0;
    long n=0;
char *end,n1;
double  a,b,x=0,y,s;
  a=prov();
  b=prov();
 
do{
    cout<<"n=";
     cin>>n1;
     n=strtoul(&n1,&end,c);
   }
while(*end!=NULL);
  { if((n>0)&(n<=1000)& !(x*x>1)) 
   s=(b-a)/n; x=a;
cout<<"s="<<s<<"\n";
      while (x<b+s)
      {if (x*x>1) cout << "x>0 функция не существует";
        else 
        y=sin(3*(asin(x)));
      cout <<"x="<<x<<"\t"; cout <<"y="<<y<<"\n";
      x=x+s;
     };
  };
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2010, 13:37     C++ проверка ввода
Посмотрите здесь:

Проверка ввода C++
Проверка ввода C++
Проверка ввода C++
C++ Проверка ввода
C++ gets() проверка ввода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BreatheInMyVoid
19 / 15 / 1
Регистрация: 05.03.2010
Сообщений: 59
25.03.2010, 21:02     C++ проверка ввода #2
C++
1
double strtod ( const char * str, char ** endptr );
Ты передаешь в функцию char (char a1) а нужно const char* (const char* a1) вот оно тебе и пишет strtod: невозможно преобразовать параметр 1 из 'char' в 'const char *'
kir_
11 / 6 / 1
Регистрация: 19.02.2010
Сообщений: 77
26.03.2010, 00:24  [ТС]     C++ проверка ввода #3
вот тут компилятор ошибки не выдает но проверка не работает я влипил вывод данных

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double prov()
{
    double b1;
    char a1,*ost;
    do{
    cout<<"vvedite 4islo \n";
     cin>>&a1;
     cout <<"vvedeno  " <<a1<<'\n';
     b1=strtod(&a1,&ost);
     cout<<"a1  "<<a1<<"\n"<<"&"<<"ost  "<<ost<<"\n"<<"b1  "<<b1<<"\n";
     if (b1!=a1){cout<<"ne vernbIi vvod \n";};
     }
    while(b1=a1);
    return b1;
}
и получил, что а1 присавевается только 1 символ из потока ... поэтому нифига не работает strtod но акимто волшебным боком b1 становится равен тому что я ввел ... и проверить это все невозможно ибо если вводится 0 то всякая х**ня получится =((
там во вложении скрин....
Изображения
 
BreatheInMyVoid
19 / 15 / 1
Регистрация: 05.03.2010
Сообщений: 59
26.03.2010, 20:53     C++ проверка ввода #4
Внимательно прочитай про функцию...что она принимает и что ты передаешь. У тебя получается один символ потому что ты передаешь ей один символ типа char, а ты передай ей указатель на константную строку. ( http://www.cplusplus.com/reference/c...stdlib/strtod/ )
C++
1
2
3
4
5
6
        char *a1,*ost;
        do{
    cout<<"vvedite 4islo \n";
     cin>>a1;
         cout <<"vvedeno  " <<a1<<'\n';
     b1=strtod(a1,&ost);
kir_
11 / 6 / 1
Регистрация: 19.02.2010
Сообщений: 77
13.04.2010, 20:51  [ТС]     C++ проверка ввода #5
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
77
78
79
// laba1.cpp: îïðåäåëÿåò òî÷êó âõîäГ* äëÿ ГЄГ®Г*ñîëüГ*îãî ïðèëîæåГ*ГЁГї.
//
#include "iostream"
#include "cstdlib"
#include "math.h"
//#include "sstream"
#include "stdio.h"
using namespace std;
 
double prov(){
        double n;
        char str[255],str2[255];
        do{
                cin>>str;
                n = atof(str);
                sprintf(str2,"%g",n);
                if (strcmp(str, str2)!=0)
                        cout<<"Neverniy vvod, povtorite snova\n";
        }
        while(strcmp(str, str2)!=0);
        return n;
}
int prov_int(){
        int n;
        char str[255],str2[255];
        do{
                cout<<"VVedite chislo promegutkov=> ";
                cin>>str;
                n = atoi(str);
                itoa(n,str2,10);
                if (strcmp(str, str2)!=0)
                        cout<<"Neverniy vvod, povtorite snova\n";
        }
        while(strcmp(str, str2)!=0);
        return n;
}
int main()
    {   
         char i;
    int n=0;
double  a,b,x,y,s;
do
{
do
{
        cout<<"VVedite a=> ";
  a=prov();
  if(a*a>1)cout<<"'a' za predelami O.o \n";
} while (a*a>1);
 
    do
    {
            cout<<"VVedite b=> ";
      b=prov();
       if(b*b>1)cout<<"'b' za predelami O.o \n";
    } while (b*b>1);
}
    while (b<=a);
do{
  n=prov_int();
  }
while(n<=0);
  { if (n!=0) {
  x=a;
  { if((n>0)&(n<=1000)& !(x*x>1)) 
   s=(b-a)/n;
  cout<<"s="<<s<<"\n";
      while (x<=b)
      { y=sin(3*(asin(x)));
        {if ((x<0.0000001)&(x>-0.0000001)) x=0;}
        {if ((y<0.0000001)&(y>-0.0000001)) y=0;}
      cout <<"x="<<x<<"\t"; cout <<"y="<<y<<"\n";
      x=x+s;
     };
  };
 };
};
system("pause");
}
В конце концов вот что у меня получилосььь
писалось в Dev++ точнее заработало в дев ++
Yandex
Объявления
13.04.2010, 20:51     C++ проверка ввода
Ответ Создать тему
Опции темы

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