В цикле do while пропускает строчку ввода строка 63 ( gets ) при втором проходе; Как с этим бороться? пробовал также cin.getline, но результат тот-же.
Код | #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); };
|
|