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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Странное поведение компилятора http://www.cyberforum.ru/cpp-beginners/thread452058.html
Всем привет! Я конечно понимаю что нужно выкладывать минимальный код повторяющий мою проблему но он будет достаточно грамосток т.к. в стандартной ситуации компилятор ведет себя нормально, НО в моей ситуации где всего "накручено" он реагирует странным образом! СУТЬ ПРОБЛЕММЫ: Есть некая дружественная функция класса Parse operator + (Parse& const one,Parse& const two) { if(one.dbresult...
C++ Новичок в С++ Не смотря на то что новичок в С, туплю по жесткому , вообщем загрузил картинку кто зна. как исправить помогите.(И да выбивает ет при создании нового проекта) Кстати там где пишет убедитесь. Ту херню я скачивали переустанавливал, и сам С тоже. http://www.cyberforum.ru/cpp-beginners/thread452041.html
найти ошибки и исправить, калькулятор C++
собственно, помогите найти и исправить ошибки. Код писал, не я. Препод задал такую задачу, найти, для лично много чего непонятного есть. Вообщем калькулятор, писался я так понимаю по Страуструпу.Имена переменных просто капец:( помогите пожалуйста!) в архиве проект.
Подсчитать количество чисел в загружаемом файле C++
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <conio.h> int main() {FILE *file; char namef; char x;
C++ вставить массив в массив по индексу http://www.cyberforum.ru/cpp-beginners/thread452024.html
Создала функцию, но она не хочет возвращать весь массив. Мы переписываем первый массив и его размерность, но у меня почему-то возвращается начальная размерность первого массива. Хотя если в выводе массива написать (s1+s2), то выведется весь новый массив. Может, подскажите, почему функция так работает? int *connectArraysByIndex (int *m1, int *m2, int &s1, int s2, int index) { if (index < 0 ||...
C++ Определить количество нулей в третьей строке матрицы В соревнованиях по прыжкам в длину участвовали N-спортсменов. Каждый спортсмен мог сделать М-попыток. Результаты (длины прыжков) занесены в таблицу A. Если результат не защитывали, то вместо длины прыжков заносили ноль. Определить количество незащитанных прыжков в 3-ей попытке подробнее

Показать сообщение отдельно
Archiolidius
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 8

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

24.02.2012, 17:53. Просмотров 625. Ответов 3
Метки (Все метки)

В цикле 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);
};
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru