Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пропускает строчку в цикле do while 
:(
    Опции темы
Archiolidius
Дата 24.2.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.2.2012

Репутация: нет
Всего: нет



В цикле 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);
};

PM MAIL   Вверх
feodorv
Дата 24.2.2012, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Неужели программа компилится?  smile 

Цитата(Archiolidius @  24.2.2012,  16:35 Найти цитируемый пост)
#include<iostream>;

Точка с запятой при деле?


Отсутствует 
Код

#include <math.h>



Цитата(Archiolidius @  24.2.2012,  16:35 Найти цитируемый пост)
            if(ch1[1]=='-') q1++;

[1] - это правильно?


Цитата(Archiolidius @  24.2.2012,  16:35 Найти цитируемый пост)
при втором проходе

При каком втором проходе? Если сомневаеетесь, то выдайте на экран введённое значение строки ch1 ;)


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Twelves
Дата 1.3.2012, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 22.6.2011

Репутация: нет
Всего: нет



Код

if (((ch1[i]<45)||(ch1[i]>57))&&(ch1[i]!='e')||(ch1[i]==47)||(ch>100000)||(ch<-100000)){

избегайте магических констант
PM MAIL   Вверх
Estranged
Дата 3.3.2012, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



char p; недостаточного размера для cin>>p; на строке 43. И не смешивайте С с С++. Если уж читать gets, то везде gets. На 43 замените cin на gets, будет работать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.