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

Не работает одно исключение ввода - C++

Восстановить пароль Регистрация
 
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 00:29     Не работает одно исключение ввода #1
Скажем так, это часть проги, должна проверять ввод значений, чтоб они были не нулевые, это условие работает, и чтоб элемент массива e1[3] был равен 3, иначе ошибка, и вот тут проблемы, т к на это условие он неадекватно реагирует
и выводит
Код
Введите коэффициент x^3=1
Ошибка
Введите коэффициент x^3=2
Ошибка
Введите коэффициент x^3=3
Ошибка

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
#include "stdafx.h"
#include <iostream> 
#include <conio.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int e1[3];
    for(int i=3; i>=0; i--)
    {
    
A1: cout<<"Введите коэффициент x^"<<i<<"=";
    cin>>e1[i];
 
        if((e1[3]=!3)||(e1[i]==0))
        {
            cout<<"Ошибка"<<endl;
            _flushall();
                        cin.clear();
                        _getch();
                        goto A1;
        }   
    }
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.03.2012, 00:35     Не работает одно исключение ввода #2
e[3] - это четвертый элемент массива. т.к. создан трехэлементный массив, то у вас выход за пределы массива с непредсказуемыми последствиями. третий элемент массива имеет индекс 2. поэтому цикл нужно начинать от двух а не трех.
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 00:48  [ТС]     Не работает одно исключение ввода #3
всеравно ошибка в исполнение не уходит, он как будто не понимает что число вводиться не правильно

Добавлено через 2 минуты
Код
Введите коэффициент x^4=2
Введите коэффициент x^3=2
Ошибка
Введите коэффициент x^3=1
Ошибка
Введите коэффициент x^3=3
Ошибка
ну тут я поменяла немного условия
C++
1
for(int i=4; i>=0; i--)
и все равно ошибка не зависимо, от массива
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.03.2012, 00:52     Не работает одно исключение ввода #4
весь код нужно видеть.
есть подозрения, что размер массива по прежнему неверный.

C++
1
if((e1[2]=!3)||(e1[i]==0))
вот еще косяк. =! - в этом операторе. нужно e1[xxx] != 3.


C++
1
e1[2]=!3 - вот тут не проверка не на равенство трем, а присваивание e1[2] нуля, т.к. !3 == 0
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 00:54  [ТС]     Не работает одно исключение ввода #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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream> 
using namespace std;
 
double f(double x)
{ return   x*x*x+3*x*x+3*x+1;}
 
double f0(double x) 
{ return   3*x*x+6*x+3;}
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
    double e1[10], e2[10], w[10], otv[10];
    int d1, d2,t;
A:  cout<<"Введите значениe старшей степени многочлена, делимого:"; cin>>d1;
                    if(!cin.good()){
                        cout<<"Ошибка! Введите значениe старшей степени многочлена, делимого заново!"<<endl;
                        _flushall();
                        cin.clear();
                        _getch();
                        goto A;}
    for(int i=0; i<d1+1; i++)
    {
A1: cout<<"Введите коэффициент x^"<<i<<"=";
    cin>>e1[i];
        if(!cin.good()||(e1[i]==0)||(e1[d1]==1))
        {
            cout<<"Ошибка"<<endl;
            _flushall();
            cin.clear();
            _getch();
            goto A1;
        }
    }
 
    cout<<e1[d1]<<"(x^"<<d1<<")";
        for(int i=d1-1; i>=0; i--)
        {
            
            if(e1[i]>0) cout<<"+"<<e1[i]<<"(x^"<<i<<")";
            else cout<<e1[i]<<"(x^"<<i<<")";
        }
        cout<<" "<<endl;
B:  cout<<"Введите значениe старшей степени многочлена, делителя:"; cin>>d2;
                    if(!cin.good()||( d1<=d2)){
                        cout<<"Ошибка! Введите значениe старшей степени многочлена, делителя заново!"<<endl;
                        _flushall();
                        cin.clear();
                        _getch();
                        goto B;}
    for(int i=0; i<d2+1; i++)
    {
B1: cout<<"Введите коэффициент x^"<<i<<"=";
    cin>>e2[i];
        if(!cin.good()||(e2[i]==0)&&(e2[d2]==1))
        {
            cout<<"Ошибка"<<endl;
            _flushall();
            cin.clear();
            _getch();
            goto B1;
        }
    }
    cout<<e2[d2]<<"(x^"<<d2<<")";
    
        for(int i=d2-1; i>=0; i--)
        {
            if(e2[i]>0) cout<<"+"<<e2[i]<<"(x^"<<i<<")";
            else cout<<e2[i]<<"(x^"<<i<<")";
    }
    
//////Вычисление само
 
    //t=d1-d2;
 
w[0]=0;
for(int i=0; i<d1+1; i++)
    {
        if(i==0) w[i]=0;
        else w[i]=e2[i-1];
    }
    
cout<<"Первое деление, остаток"<<endl;
    for(int i=d1; i>=0; i--)
        {
            otv[i]=e1[i]-w[i];
            if(otv[i]==0)
            if(otv[i]>0) cout<<"+"<<otv[i]<<"(x^"<<i<<")";
            else cout<<otv[i]<<"(x^"<<i<<")";
        
        }
    
 
    system("pause");
    return 0;
}
Это код, в итоге должен вычислять нод для многочленов, пока тока ввод коэфициентов, проверка данных и считает первый остаток от деления многочленов, и конечно вывод всех на экран
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.03.2012, 01:00     Не работает одно исключение ввода #6
не увидел тут код из первого сообщения. проблему кода из первого сообщения я уже указал. там ошибка в операторе неравенства.
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 01:09  [ТС]     Не работает одно исключение ввода #7
там где метки А1 и B1

Добавлено через 2 минуты
нужно e1[xxx] != 3.
C++
1
e1[2]=!3 - вот тут не проверка не на равенство трем, а присваивание e1[2] нуля, т.к. !3 == 0
e1[xxx] != 3. ээээ поясни пж, как это воспринимать
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 01:15     Не работает одно исключение ввода #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    setlocale(LC_ALL, "");
           int e1[3];
        for(int i=2; i>=0; i--)
        {
        
A1:     cout<<"Введите коэффициент x^"<<i<<"=";
        cin>>e1[i];
 
                if((e1[2]!=3)||(e1[i]==0))
                {
                        cout<<"Ошибка"<<endl;
                        _flushall();
                        cin.clear();
 
                        goto A1;
                }       
        }
        system("pause");
    return EXIT_SUCCESS;
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.03.2012, 01:18     Не работает одно исключение ввода #9
C++
1
2
3
4
5
6
7
 // вот упрощенный вариант первоначального кода.
 int e1[3];
 int i = 2;
 if((e1[2]=!3)||(e1[i]==0))
 {
    // ошибка
 }
смотрим на выражение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
e1[2]=!3
//вот оно же со скобочками:
e1[2] = (!3);
//!3 - это булевый тип. значение false. при переводе в инт это 0. т.о. это все эквивалентно
e2[2] = 0
 
//теперь перепишет исходный if:
 if((e1[2] = 0)||(e1[i]==0))
 {
   // в первых скобочках во второй элемент записывается 0. выражение в скобочках при касте
  // к bool типу даст false. выражение во сторых же скобочках e1[i]==0 всегда будет true, потому
  // в первых скобочках туда записали ноль (при i == 2). Поэтому выполнение программы 
  // всегда будет заходить в этот if и печатать ошибку.
    // ошибка
 }
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 01:40  [ТС]     Не работает одно исключение ввода #10
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
#include "stdafx.h"
#include <iostream> 
#include <conio.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    double e1[10];
    int d1, d2,t;
A:  cout<<"Введите значениe старшей степени многочлена, делимого:"; cin>>d1;
                    if(!cin.good()){
                        cout<<"Ошибка! Введите значениe старшей степени многочлена, делимого заново!"<<endl;
                        _flushall();
                        cin.clear();
                        _getch();
                        goto A;}
    for(int i=d1; i>=0; i--)
    {
A1: cout<<"Введите коэффициент x^"<<i<<"=";
    cin>>e1[i];
        if(!cin.good()&&(e1[d1]!=3)||(e1[i]==0))
        {
            cout<<"Ошибка"<<endl;
            _flushall();
            cin.clear();
            goto A1;
        }
    }
 
    cout<<e1[d1]<<"(x^"<<d1<<")";
        for(int i=d1-1; i>=0; i--)
        {
            
            if(e1[i]>0) cout<<"+"<<e1[i]<<"(x^"<<i<<")";
            else cout<<e1[i]<<"(x^"<<i<<")";
        }
    system("pause");
    return 0;
    return EXIT_SUCCESS;
}
отдельно все работает, попробовала вставить в основной код, и он опять не отображает того что надо, а надо чтобы первый коэффициент (с максимальным i ) был равен 1
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 01:43     Не работает одно исключение ввода #11
метки зло, запрограммируйте нормально
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 01:58  [ТС]     Не работает одно исключение ввода #12
Цитата Сообщение от panicwassano Посмотреть сообщение
метки зло, запрограммируйте нормально
каким циклом посоветуешь?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
09.03.2012, 03:05     Не работает одно исключение ввода #13
Цитата Сообщение от White Luna Посмотреть сообщение
каким циклом посоветуешь?
do..while
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2012, 12:55     Не работает одно исключение ввода
Еще ссылки по теме:

Не работает исключение C++
Не работает программа проверки ввода цифр C++
Не работает gets (программа игнорирует операцию ввода) C++

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

Или воспользуйтесь поиском по форуму:
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
09.03.2012, 12:55  [ТС]     Не работает одно исключение ввода #14
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
#include "stdafx.h"
#include <iostream> 
#include <conio.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
        setlocale(LC_ALL,"Russian");
    double e1[10];
        int d1, d2,t;
A:      cout<<"Введите значениe старшей степени многочлена, делимого:"; cin>>d1;
                        if(!cin.good()){
                        cout<<"Ошибка! Введите значениe старшей степени многочлена, делимого заново!"<<endl;
                        _flushall();
                        cin.clear();
                        _getch();
                        goto A;}
        for(int i=d1; i>=0; i--)
        {
            do
            {
    cout<<"Введите коэффициент x^"<<i<<"=";
        cin>>e1[i];
                if(!cin.good()||(e1[i]==0))
              
        {
                        cout<<"Ошибка"<<endl;
                        _flushall();
                        cin.clear();
                }
        }
        while(e1[d1]!=1);
        }
        cout<<e1[d1]<<"(x^"<<d1<<")";
                for(int i=d1-1; i>=0; i--)
                {
                        
                        if(e1[i]>0) cout<<"+"<<e1[i]<<"(x^"<<i<<")";
                        else cout<<e1[i]<<"(x^"<<i<<")";
                }
        system("pause");
        return 0;
        return EXIT_SUCCESS;
}
вот переделала, но ошибка все равно остается, точнее элемент с максимальной степенью, мож какой угодно вводить а мне нужна 1
Yandex
Объявления
09.03.2012, 12:55     Не работает одно исключение ввода
Ответ Создать тему
Опции темы

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