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

Пропускает строчку в цикле do while - C++

Восстановить пароль Регистрация
 
Archiolidius
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 8
24.02.2012, 17:53     Пропускает строчку в цикле do while #1
В цикле do while пропускает строчку ввода строка 64 ( gets ) при втором проходе;
Как с этим бороться? пробовал также cin.getline, но результат тот-же.
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
101
102
103
104
105
106
107
#include<iostream>
#include <windows.h>
#include <string>
using namespace std;
double perev();
double perev1();
double x,c,q=1,e,y=1; int k;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char p;
    do{
    cout<<"Введите х : ";
    x=perev();
    cout<<"Введите k : ";
    k=perev();
    if (k==0){
        cout<<"Невозможно вычислить. K не может быть равно 0\n";
        system("pause");
        return(0);
    }
    if((k>0)&&(k%2==0)&&(x<0)){
        cout<<"Невозможно вычислить. При парном К>0 X должен быть больше или равно 0\n";
        system("pause");
        return(0);
    }
    if((k<0)&&(k%2==0)&&(x<=0)){
        cout<<"Невозможно вычислить. При парном К<0 X должен быть больше 0\n";
        system("pause");
        return(0);
    }
    if((k<0)&&(k%2!=0)&&(x==0)){
        cout<<"Невозможно вычислить. При непарном К<0 X не должен быть равным 0\n";
        system("pause");
        return(0);
    }   
    cout<<"Введите точность : ";
    e=perev1();
    while(fabs(q)>=e){
        q=(x/(pow(y,(k-1)))-y)/k;
        y=y+q;
    }
    cout<<y<<endl;
    cout<<"Продолжить роботу(y/n)?";
    cin>>p;
    if (p=='n') return(0);
    }
    while(p!='n');
}
double perev()
{
    double ch;
    int y=0;
    do{
    y=1;
    int q=0;
    int q1=0;
    int q2=0;
    int i;  
    char ch1[256];
    //cin.getline (ch1, 256);
    gets(ch1);
    ch=atof(ch1);
    for(i=0;i<strlen(ch1);i++){     
            if (((ch1[i]<45)||(ch1[i]>57))&&(ch1[i]!='e')||(ch1[i]==47)||(ch>100000)||(ch<-100000)){
                cout<<"Неправильный ввод! Введите ЧИСЛО в дапазоне от -100000 до 100000 еще раз!\n"; y=0;  break;
            }                               
            if(ch1[i]=='.') q++;
            if(ch1[1]=='-') q1++;
            if(ch1[i]=='e') q2++;
            if ((q>1)||(q1>1)||(q2>1))
            {
                cout<<"Неправильный ввод! Введите ЧИСЛО в дапазоне от -100000 до 100000 еще раз!\n"; y=0; break;}           
            }
    }
    while(y!=1);
    return(ch);
};
double perev1()
{
    double ch;
    int y=0;
    do{
    y=1;
    int q=0;
    int q1=0;
    int q2=0;
    int i;  
    char ch1[256];
    gets(ch1);
    ch=atof(ch1);
    for(i=0;i<strlen(ch1);i++){     
            if (((ch1[i]<45)||(ch1[i]>57))&&(ch1[i]!='e')||(ch1[1]==47)||((ch1[0]=='0')&&(ch1[1]!='.'))||(ch>1)||(ch<0)){
                cout<<"Неправильный ввод! Введите ЧИСЛО в дапазоне от 0 до 1 еще раз!\n"; y=0;  break;
            }                               
            if(ch1[i]=='.') q++;
            if(ch1[1]=='-') q1++;
            if(ch1[i]=='e') q2++;
            if ((q>1)||(q1>1)||(q2>1))
            {
                cout<<"Неправильный ввод! Введите ЧИСЛО в дапазоне от 0 до 1 еще раз!\n"; y=0; break;}          
            }
    }
    while(y!=1);
    return(ch);
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 17:53     Пропускает строчку в цикле do while
Посмотрите здесь:

компилятор пропускает строчки с инициализацией C++
Почему пропускается getline? C++
пропускает ввод символа C++
C++ Пропускает первое значение
Компилятор пропускает цикл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IFree Host
Заблокирован
24.02.2012, 17:56     Пропускает строчку в цикле do while #2
Цитата Сообщение от Archiolidius Посмотреть сообщение
char ch1[256];
//cin.getline (ch1, 256);
gets(ch1);
Ну, если ты ее так и запускаешь закоментированой, то наверное она и не должна выполнятся.
Archiolidius
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 8
24.02.2012, 17:58  [ТС]     Пропускает строчку в цикле do while #3
IFree Host, gets(ch1); не выполняется!
thebvog
 Аватар для thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
24.02.2012, 18:18     Пропускает строчку в цикле do while #4
Archiolidius, деббагером смотрел как код выполняется?
Yandex
Объявления
24.02.2012, 18:18     Пропускает строчку в цикле do while
Ответ Создать тему
Опции темы

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