Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
1

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

21.09.2010, 17:18. Показов 1720. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Вводится строка и передаётся как параметр.
При использовании следующего кода:
C++
1
2
3
4
5
6
7
while(str)
    {    
        if (*str == '+')
            break;
        *(str++);
        i++;
    }
проверка будет идти от начала (т.е. указатель будет стоять в начале строки)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2010, 17:18
Ответы с готовыми решениями:

Вопрос по командной строке
Здравствуйте! Учусь на втором курсе по специальности «Информатика и выч. техника». У нас появился...

Вопрос по строке подключения ADO
Здравствуйте. Никак не могу найти ответ на такой вопрос. Я хочу подключить приложение написаное на...

Вопрос по адрессу в браузерной строке
Хотелось бы узнать, живой пример тому - контакт. Это что, для каждого пользователя и группы...

Проверить, есть ли в строке восклицание (!) и вопрос (?)
Написать метод bool Test(string S) принимающую значение True, если В строке есть восклицание (!) и...

21
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
21.09.2010, 17:20 2
По-моему да. Но что вам мешает это самому проверить?
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 17:26  [ТС] 3
Цитата Сообщение от silent_1991 Посмотреть сообщение
По-моему да. Но что вам мешает это самому проверить?
if (*str != '\0') ?
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
21.09.2010, 17:28 4
Да нет, просто вывести текущий символ и посмотреть, совпадает он с первым или нет.
0
9 / 9 / 0
Регистрация: 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... ?
0
Эксперт С++
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:36 6
Цитата Сообщение от alexsvk Посмотреть сообщение
if (*str != '\0') ?
Дебаггеры на что придуманы? Ставите точку останова на while'е и когда выполнение программы на ней остановится смотрите на что указывает str.
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
21.09.2010, 17:36 7
break в данном случае выйдет только из while
Разумеется.
0
Эксперт С++
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 17:37 8
Цитата Сообщение от alexsvk Посмотреть сообщение
break в данном случае выйдет только из while и будет проверка i != strlen(str)) //number... ?
Да, break прерывает один цикл, внутри которого он находится.

Не по теме:

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

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
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");
0
9 / 9 / 0
Регистрация: 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(), то отлично работает, но в случае включения последующих инструкций после ввода - курсор и никакой реакции на нажатия
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
21.09.2010, 22:01 11
Цитата Сообщение от alexsvk Посмотреть сообщение
ComNum num_1(str);
Это что?
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 22:04  [ТС] 12
Цитата Сообщение от easybudda Посмотреть сообщение
Это что?
определение объекта
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
21.09.2010, 22:15 13
Цитата Сообщение от alexsvk Посмотреть сообщение
определение объекта
Ну а выложить его скромность не позволяет? Я так понял - тут оно и виснет, не?
0
9 / 9 / 0
Регистрация: 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;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
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);
и далее по тексту (что я закомментировал) - это что за танцы с бубном?
0
9 / 9 / 0
Регистрация: 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;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
22.09.2010, 09:29 17
Цитата Сообщение от alexsvk Посмотреть сообщение
C++
1
2
3
4
ComNum::ComNum(char str[])
{
...
}
Вы, профессор, воля Ваша, что-то нескладное сочинили. Оно может и умно', да уж больно непонятно...
(с) М. Булгаков.
Как-то там у Вас не просто всё... Приведите пример входных данных и результатов действий с ними. Кстати, примеров классов комплексных чисел на форуме много. Вот совсем недавно было: Структур комплексных чисел
2
9 / 9 / 0
Регистрация: 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;
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
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;
...
0
9 / 9 / 0
Регистрация: 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() - выход.
0
23.09.2010, 00:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2010, 00:16
Помогаю со студенческими работами здесь

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves)
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама...

В строке S записаны слова исходного текста, в отдельной строке S1- одно из слов, которое может быть в строке S (количество букв в S1 не превышает 10)
В строке S записаны слова исходного текста, в отдельной строке S1 - одно из слов, которое может...

[ВОПРОС]: Меню и вопрос при регистрации
Помогите пожалуйста. У меня vbulletin 4.0.7 и после установки в верхнем меню есть лишняя навигация....

Вопрос о картинках, вопрос о формулах
Всем доброго времени суток! Как обычно глупые вопросы... Вопрос первый, с сайта копируется...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru