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

Вопрос о строке - C++

Восстановить пароль Регистрация
 
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:18     Вопрос о строке #1
Добрый день!
Вводится строка и передаётся как параметр.
При использовании следующего кода:
C++
1
2
3
4
5
6
7
while(str)
    {    
        if (*str == '+')
            break;
        *(str++);
        i++;
    }
проверка будет идти от начала (т.е. указатель будет стоять в начале строки)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2010, 17:18     Вопрос о строке
Посмотрите здесь:

C++ Вопрос по массивав, "институтский" вопрос.
C++ В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке
C++ Написать програму которая заменяет все Enter и Tab в строке str1 на сымволи '\n' и '\t' в строке str2.
C++ В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).
C++ Массивы. Определить количество элементов в каждой строке матрицы А, модуль которых равняется порядковому номеру элемента в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.09.2010, 17:20     Вопрос о строке #2
По-моему да. Но что вам мешает это самому проверить?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:26  [ТС]     Вопрос о строке #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
По-моему да. Но что вам мешает это самому проверить?
if (*str != '\0') ?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.09.2010, 17:28     Вопрос о строке #4
Да нет, просто вывести текущий символ и посмотреть, совпадает он с первым или нет.
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:34  [ТС]     Вопрос о строке #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(i == strlen(str)) // number consists from either im or real part
    {
        i = 0;
        while(str)
        {    
            if (*str == 'i')
                break;
            *(str++);
            i++;
        }
 
        if(i != strlen(str)) // number consits only from Im part
            Rl = 0.0; 
    }
ещё вопрос: break в данном случае выйдет только из while и будет проверка i != strlen(str)) //number... ?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:36     Вопрос о строке #6
Цитата Сообщение от alexsvk Посмотреть сообщение
if (*str != '\0') ?
Дебаггеры на что придуманы? Ставите точку останова на while'е и когда выполнение программы на ней остановится смотрите на что указывает str.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.09.2010, 17:36     Вопрос о строке #7
break в данном случае выйдет только из while
Разумеется.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:37     Вопрос о строке #8
Цитата Сообщение от alexsvk Посмотреть сообщение
break в данном случае выйдет только из while и будет проверка i != strlen(str)) //number... ?
Да, break прерывает один цикл, внутри которого он находится.

Не по теме:

Читайте литературу.

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.09.2010, 17:57     Вопрос о строке #9
Цитата Сообщение от alexsvk Посмотреть сообщение
Добрый день!
Вводится строка и передаётся как параметр.
При использовании следующего кода:
C++
1
2
3
4
5
6
7
while(str)
    {    
        if (*str == '+')
            break;
        *(str++);
        i++;
    }
проверка будет идти от начала (т.е. указатель будет стоять в начале строки)?
На самом деле оно просто зациклится, если только вместо str NULL не передать, или остановится, если в строке '+' встретит, или вылетит с ошибкой, когда за пределы str выйдет... На сколько я понял - нужно посчитать количество символов в строке до символа '+' (если он там есть)?
C
1
2
3
4
5
6
7
8
#include <string.h>
#include <stdio.h>
...
char * p;
if ( p = strchr(str, '+') )
  printf("%d символов в строке перед '+'\n", p - str);
else
  printf("Символ '+' не найден\n");
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 20:59  [ТС]     Вопрос о строке #10
Цитата Сообщение от easybudda Посмотреть сообщение
На самом деле оно просто зациклится, если только вместо str NULL не передать, или остановится, если в строке '+' встретит, или вылетит с ошибкой, когда за пределы str выйдет... На сколько я понял - нужно посчитать количество символов в строке до символа '+' (если он там есть)?
C
1
2
3
4
5
6
7
8
#include <string.h>
#include <stdio.h>
...
char * p;
if ( p = strchr(str, '+') )
  printf("%d символов в строке перед '+'\n", p - str);
else
  printf("Символ '+' не найден\n");
да нет, так я узнаю, из 2-х или одного элементов состоит комплексное число, но спасибо.
Ещё один вопрос сейчас встретился:
C++
1
2
3
4
5
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    
    ComNum num_1(str);
//    strcpy(str,"");
Если комментирую всё после cin.getline(), то отлично работает, но в случае включения последующих инструкций после ввода - курсор и никакой реакции на нажатия
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.09.2010, 22:01     Вопрос о строке #11
Цитата Сообщение от alexsvk Посмотреть сообщение
ComNum num_1(str);
Это что?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 22:04  [ТС]     Вопрос о строке #12
Цитата Сообщение от easybudda Посмотреть сообщение
Это что?
определение объекта
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.09.2010, 22:15     Вопрос о строке #13
Цитата Сообщение от alexsvk Посмотреть сообщение
определение объекта
Ну а выложить его скромность не позволяет? Я так понял - тут оно и виснет, не?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 22:31  [ТС]     Вопрос о строке #14
Цитата Сообщение от easybudda Посмотреть сообщение
Ну а выложить его скромность не позволяет? Я так понял - тут оно и виснет, не?
виснет при любой инструкции после 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
// lr1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int main(int argc, char* argv[])
{
    char str [80];
 
    cout.width(strlen("Examples of expressions:")/2 + 40);
    cout<<"Examples of expressions:"<<endl;
    cout.width(strlen("2+3i")/2 + 40);
    cout<<"2+3i"<<endl;
    cout.width(strlen("2") + 40);
    cout<<2<<endl; 
    cout.width(strlen("0i")/2 + 40);
    cout<<"0i"<<endl;
    cout.width(strlen("2-1i")/2 + 40);
    cout<<"2-1i"<<endl;
    
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    cout<<'a';
    ComNum num_1(str);
//    strcpy(str,"");
//    cout<<str<<"ya"<<endl;
 
/*    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    ComNum num_2(str);*/
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.09.2010, 23:34     Вопрос о строке #15
alexsvk, да что ж из Вас всё клещами-то тянуть надо? Объявление/определение класса ComNum где? В его же конструкторе программа виснет...
Вот так всё работает, правда, толка от такого класса не много...
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
#include <iostream>
#include <cstring>
 
class ComNum {
    char * str;
public:
    ComNum(const char * _str){
        size_t len = strlen(_str);
        str = new char [ len + 1 ];
        strcpy(str, _str);
    }
    ~ComNum(){
        delete [] str;
    }
    friend std::ostream & operator << (std::ostream & ost, const ComNum & c){
        ost << c.str;
        return ost;
    }
};
 
int main(int argc, char* argv[])
{
    char str [80];
 
    //cout.width(strlen("Examples of expressions:")/2 + 40);
    std::cout << "Examples of expressions:" << std::endl;
    //cout.width(strlen("2+3i")/2 + 40);
    //cout<<"2+3i"<<endl;
    //cout.width(strlen("2") + 40);
    //cout<<2<<endl; 
    //cout.width(strlen("0i")/2 + 40);
    //cout<<"0i"<<endl;
    //cout.width(strlen("2-1i")/2 + 40);
    //cout<<"2-1i"<<endl;
    
    std::cout << "Enter the 1st expression: ";
    std::cin.getline(str,79);
//    cout<<'a';
    ComNum num_1(str);
//    strcpy(str,"");
//    cout<<str<<"ya"<<endl;
 
    std::cout << "Enter the 2nd expression: ";
    std::cin.getline(str,79);
    ComNum num_2(str);
    
    std::cout << "First: " << num_1 << "\nSecond: " << num_2 << std::endl;
    return 0;
}
И кстати
Цитата Сообщение от alexsvk Посмотреть сообщение
cout.width(strlen("2+3i")/2 + 40);
и далее по тексту (что я закомментировал) - это что за танцы с бубном?
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 23:53  [ТС]     Вопрос о строке #16
Странно, работает, но при вставке strcpy() getline() виснет.
Про танцы: это так сказать центровка
C++
1
2
3
4
5
6
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
 
#include "omNum.h"
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
// lr1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int main(int argc, char* argv[])
{
    char str [80];
 
    cout.width(strlen("Examples of expressions:")/2 + 40);
    cout<<"Examples of expressions:"<<endl;
    cout.width(strlen("2+3i")/2 + 40);
    cout<<"2+3i"<<endl;
    cout.width(strlen("2") + 40);
    cout<<2<<endl; 
    cout.width(strlen("0i")/2 + 40);
    cout<<"0i"<<endl;
    cout.width(strlen("2-1i")/2 + 40);
    cout<<"2-1i"<<endl;
    
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    ComNum num_1(str);
 
    cout<<"Enter the 2d expression: ";
    cin.getline(str,79);
    ComNum num_2(str);
 
    ComNum o;
 
    o = num_1 + num_2;
    o.Show();
 
    o = num_1 - num_2;
    o.Show();
 
    o = num_1 * num_2;
    o.Show();
 
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ComNum  
{
    double Im, Rl;
    int len;
public:
    ComNum()
    {
        Im = 0.0;
        Rl = 0.0;
    }
    ComNum(char[]);
    virtual ~ComNum() {}
    ComNum operator+(ComNum&);
    ComNum operator-(ComNum&);
    ComNum operator*(ComNum&);
    void Show();
};
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// omNum.cpp: implementation of the ComNum class.
//
//////////////////////////////////////////////////////////////////////
 
#include "stdafx.h"
#include "omNum.h"
 
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
ComNum::ComNum(char str[])
{
    len = strlen(str) - 1;
    int i = 0, k = 0;
    bool flag = true;
    char *s;
    
    ////////////exceptions////////////
    try
    {
        while (isdigit(*(str+i)) || *(str+i) == 'i' || *(str+i) == '-' || *(str+i) == '+')
            i++;
        if (i != len+1 || !str)
            throw 0;
    }
    catch(int)
    {
        MessageBox(HWND_DESKTOP,"You've entered a wrong expression!","Attention!",MB_OK|MB_ICONERROR);
        exit(1);    
    }
 
    i = 0;
    while(str[i] != '\0')
    {    
        if (str[i] == '+')
            break;
        else 
            if(str[i] == '-')    
            {
                flag = false;
                break;
            }
        str[i];
        i++;
    }
 
    ///not full-fledged number///
    if((unsigned)i == strlen(str)) // number consists from either im or real part
    {
        i = 0;
        do
        {
            if (str[k] == 'i')
                break;
            *(str+k);
            i++;
        }while(str[k++] != '\0');
 
        if((unsigned)i != strlen(str)) // number consits only from im part
            Rl = 0.0; 
        else
            Im = 0.0; // number consits only from real part
    
    
        if (Rl == 0.0)
        {
             s = new char [k+1];
             if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
 
            for (i = 0; i < k+1; i++)
                s[i] = str[i];
            if (!flag)
                Im = -atof(s);
 
            delete [] s;
        }
        else
            Rl = atof(str);
    }
    /////////////////////////////
 
 
 
    ///full-fledged number///
    k = 0;
 
    for (i = len; i >= 0; i--)
    {
        if (str[i-1] == '+' || str[i-1] == '-')
        {
            int tmp = i;
            s = new char [len-i]; // len - 1 -> 'i' - eliminated 
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            
            while (str[i] != 'i')
                s [k++] = str[i++];
            if (!flag)
                Im = -atof(s);
            else
                Im = atof(s);
            delete [] s;
 
            s = new char [tmp];
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            for (i = 0; i < tmp; i++)
                s [i] = str[i];
            Rl = atof(s);
            delete [] s;
        }
    }
    ///////////////////////// 
}
 
ComNum ComNum::operator +(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl + ob.Rl;
    tmp.Im = Im + ob.Im;
    
    return tmp;
}
 
ComNum ComNum::operator -(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl - ob.Rl;
    tmp.Im = Im - ob.Im;
    
    return tmp;
}
 
ComNum ComNum::operator *(ComNum& ob)
{
    ComNum tmp;
    
    tmp.Rl = Rl*ob.Rl - Im*ob.Im;
    tmp.Im = Rl*ob.Im + ob.Rl*Im;
    
    return tmp;
}
 
void ComNum::Show()
{
    cout<<"Result of chosen operation: "<<Rl<<" + "<<Im<<"i"<<endl;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.09.2010, 09:29     Вопрос о строке #17
Цитата Сообщение от alexsvk Посмотреть сообщение
C++
1
2
3
4
ComNum::ComNum(char str[])
{
...
}
Вы, профессор, воля Ваша, что-то нескладное сочинили. Оно может и умно', да уж больно непонятно...
(с) М. Булгаков.
Как-то там у Вас не просто всё... Приведите пример входных данных и результатов действий с ними. Кстати, примеров классов комплексных чисел на форуме много. Вот совсем недавно было: Структур комплексных чисел
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
22.09.2010, 21:10  [ТС]     Вопрос о строке #18
Цитата Сообщение от easybudda Посмотреть сообщение
(с) М. Булгаков.
Как-то там у Вас не просто всё... Приведите пример входных данных и результатов действий с ними. Кстати, примеров классов комплексных чисел на форуме много. Вот совсем недавно было: Структур комплексных чисел
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
int main(int argc, char* argv[])
{
    char str [80];
    char s [80];
    unsigned int action;
    int ch = 0;
    ComNum o;
 
    cout.width(strlen("Examples of the expressions:")/2 + 40);
    cout<<"Examples of expressions:"<<endl;
    cout.width(strlen("2+3i")/2 + 40);
    cout<<"2+3i"<<endl;
    cout.width(strlen("2") + 40);
    cout<<2<<endl; 
    cout.width(strlen("0i")/2 + 40);
    cout<<"0i"<<endl;
    cout.width(strlen("2-1i")/2 + 40);
    cout<<"2-1i"<<endl;
    
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    ComNum num_1(str);
    
    strcpy(s,str);
 
    cout<<"Enter the 2d expression: ";
    cin.getline(str,79);
    ComNum num_2(str);
 
    while(!ch)
    {
        system("cls");
        cout<<"\nOperations:\n";
        cout<<"Summing up - 1\n";
        cout<<"Distracting - 2\n";
        cout<<"Multiplying - 3\n: ";
        cin>>action;
 
        switch(action)
        {
        case 1:
            cout<<"First expression: "<<s<<endl<<"Second expression: "<<str<<endl;
            o = num_1 + num_2;
            o.Show();         
            ch = 1;
            break;
        case 2:
            cout<<"First expression: "<<s<<endl<<"Second expression: "<<str<<endl;
            o = num_1 - num_2;
            o.Show();
            ch = 1;
            break;
        case 3:
            cout<<"First expression: "<<s<<endl<<"Second expression: "<<str<<endl;
            o = num_1 * num_2;
            o.Show();
            ch = 1;
            break;
 
        default:
            MessageBox(NULL,"Enter 1, 2 or 3!","Attention!",MB_OK|MB_ICONINFORMATION);
            break;
        }
        
        cout<<"2 - continue, any key - exit\n";
        cin>>ch;
        if (ch != 2)
            exit(1);
        else
            ch = 0;
    }
 
    return 0;
}
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
ComNum::ComNum(char str[])
{
    len = strlen(str) - 1;
    int i = 0, k = 0;
    bool flag = true;
    char *s;
    
    ////////////exceptions////////////
    try
    {
        while (isdigit(*(str+i)) || *(str+i) == 'i' || *(str+i) == '-' || *(str+i) == '+')
            i++;
        if (i != len+1 || !str)
            throw 0;
    }
    catch(int)
    {
        MessageBox(HWND_DESKTOP,"You've entered a wrong expression!","Attention!",MB_OK|MB_ICONERROR);
        exit(1);    
    }
 
    i = 0;
    while(str[i] != '\0')
    {    
        if (str[i] == '+')
            break;
        else 
            if(str[i] == '-')    
            {
                flag = false;
                break;
            }
        str[i];
        i++;
    }
 
    ///not full-fledged number///
    if((unsigned)i == strlen(str)) // number consists from either im or real part
    {
        i = 0;
        do
        {
            if (str[k] == 'i')
                break;
            i++;
        }while(str[k++] != '\0');
 
        if((unsigned)--i != strlen(str)) // number consits only from im part
            Rl = 0.0; 
        else
            Im = 0.0; // number consits only from real part
    
    
        if (Rl == 0.0)
        {
             s = new char [k+1];
             if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
 
            for (i = 0; i < k+1; i++)
                s[i] = str[i];
            if (!flag)
                Im = -atof(s);
            else 
                Im = atof(s);
 
            delete [] s;
        }
        else
            Rl = atof(str);
    }
    /////////////////////////////
 
 
 
    ///full-fledged number///
    k = 0;
 
    for (i = len; i >= 0; i--)
    {
        if (str[i-1] == '+' || str[i-1] == '-')
        {
            int tmp = i;
            s = new char [len-i]; // len - 1 -> 'i' - eliminated 
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            
            while (str[i] != 'i')
                s [k++] = str[i++];
            if (!flag)
                Im = -atof(s);
            else
                Im = atof(s);
            delete [] s;
 
            s = new char [tmp];
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            for (i = 0; i < tmp; i++)
                s [i] = str[i];
            Rl = atof(s);
            delete [] s;
        }
    }
    ///////////////////////// 
}
 
ComNum ComNum::operator +(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl + ob.Rl;
    tmp.Im = Im + ob.Im;
    
    return tmp;
}
 
ComNum ComNum::operator -(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl - ob.Rl;
    tmp.Im = Im - ob.Im;
    
    return tmp;
}
Вопрос о строке

Вопрос о строке

Прочитал указанную в ссылке тему. Да, всё отлично, но в этой программе пользователь может вводить ,так сказать, "сразу". Думаю, что это более изысканный вариант ввода комплексного числа. Согласен, код не можно, а нужно упростить
Но всё же, всё работает, кроме одной маленькой "заразы". В main() есть следующий фрагмент:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       
.........
 default:
            MessageBox(NULL,"Enter 1, 2 or 3!","Attention!",MB_OK|MB_ICONINFORMATION);
            break;
        }
        
        cout<<"2 - continue, any key - exit\n";
        cin>>ch;
        if (ch != 2)
            exit(1);
        else
            ch = 0;
    }
 
    return 0;
После работы "default" выводится строка "2 - continue, any key - exit", но пропускаются операторы, следующие после неё. Как этого избежать? p.s. пробовал cout<<flush;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.09.2010, 21:54     Вопрос о строке #19
Цитата Сообщение от alexsvk Посмотреть сообщение
но пропускаются операторы, следующие после неё. Как этого избежать? p.s. пробовал cout<<flush;
неправильно пробовали.
C++
1
2
3
4
5
...
cout << "2 - continue, any key - exit\n";
cin.ignore(1024, '\n');
cin >> ch;
...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2010, 00:16     Вопрос о строке
Еще ссылки по теме:

C++ В прямоугольной матрице найти сумму элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу.
C++ Дан двумерный массив. найти количество элементов в каждой строке, меньших диагонального в этой строке
C++ Найти число пробелов в строке и заменить их на номер по порядку в исходной строке

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

Или воспользуйтесь поиском по форуму:
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
23.09.2010, 00:16  [ТС]     Вопрос о строке #20
Цитата Сообщение от easybudda Посмотреть сообщение
неправильно пробовали.
C++
1
2
3
4
5
...
cout << "2 - continue, any key - exit\n";
cin.ignore(1024, '\n');
cin >> ch;
...
Почему 1024 раза пропустить Enter?
Да, и ещё, вставил эту инструкцию, но после вывода MessageBox() - выход.
Yandex
Объявления
23.09.2010, 00:16     Вопрос о строке
Ответ Создать тему
Опции темы

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