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

Проблема при вызове функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Символьные строки и функции http://www.cyberforum.ru/cpp-beginners/thread377393.html
Помогите написать функцию Right(s,l) для выравнивание строки s по правому краю до длины l.
C++ Определить имеет ли система решения,если имеет то их найти Помогите решить задачи с контр по программированию 1-3 с++ 1. Определить имеет ли система решения,если имеет то их найти a*x+b*y=c d*x*x+e*y*y=f 2. Поступает последовательность,0-конец последовательности.Найти порядковый номер самого маленького по модулю элемента последовательности. 3.Сложить 15 простое,4 совершенное и 1 нечетное избыточное число(составить 3 функции которые будут... http://www.cyberforum.ru/cpp-beginners/thread377392.html
C++ Сортировка ассоциативного контейнера!
В классе есть поля: название, цена и количество. Нужно записать данные в ассоциативный контейнер, и нужно один раз отсортировать и вывести по убыванию цены, а затем отсортировать и вывести по возрастанию количества. (Можно использовать vector и sort () с предикатом). Я могу только написать два функторы которые будут его сортировать, но тогда надо два map или multimap.Как это сделать одним мепом?
Сдвинуть циклически элементы одномерного массива на k позиций влево C++
Тема и есть условие задачи... Сам же я застопорился на написании алгоритма сдвига :- #include <iostream.h> #include <math.h> int main() { int a; int i, n; cout << "Vvedite kol-vo elementov: "; cin >> n;
C++ Множественное наследование в языке С++ http://www.cyberforum.ru/cpp-beginners/thread377364.html
#include <iostream.h> #include <stdlib.h> #include <conio.h> class D2{ int a; public: D2() { }; D2(int x) { a=x; } void show_D2() { cout <<"D2= "<< a << "\n"; }
C++ Числа с плавающей запятой есть программа которая подсчитывает сумму чисел, введенных с командной строки. к примеру С:\> test.exe 1 2 3 <ENTER> что бы просуммировать эти числа необходимо преобразовать из char в long, например функцией strtol(). но если мне необходимо просуммировать нецелые числа, скажем: С:\> test.exe 1 2.2 3.5 <ENTER> подробнее

Показать сообщение отдельно
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
05.11.2011, 14:52  [ТС]     Проблема при вызове функции
-=ЮрА=-, спасибо за ответ! Мой код был не допилен и int b там вообще лишняя, ну да бог с ней, к ожалению ваш вариант у меня имеет проблемы с кодировками...
По факту, при CharacterSet = Use Unicode Character Set получаем
[IMG]http://s54.***********/i144/1111/fd/ee3ea685fb10.jpg[/IMG]
Уже понятно что у вас CharacterSet = Use Multi-Byte Character Set, на всякий случай правлю MessageBox который у меня дефайнится как MessageBoxW на MessageBoxA, получаю:
[IMG]http://s46.***********/i113/1111/8e/9ccf529a5011.jpg[/IMG]
Выставляю CharacterSet = Use Multi-Byte Character Set(мессадж бокс меняю обратно разумеется), получаю:
[IMG]http://s017.***********/i414/1111/4c/cb6bad90761b.jpg[/IMG]
Картина одинаковая, что странно...

При этом вызов функции change забивает консоль мусором:
[IMG]http://i062.***********/1111/1a/1dc735f95eab.png[/IMG]

Что с _getch() я так и не понял, ответе пожалуйста кто может!
1) Из-за чего же _getch() игнорится? Не помогают ни wcin.sync(), ни wcin.ignore(), ни wcin.sync_with_stdio();
2) Как это предвидеть и избежать?
3) Как это лечить, если не получается избежать?

Добавлено через 12 минут
Сейчас код имеет такой вид(недоделки вырезаны):
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <conio.h>
 
using namespace std;
 
wchar_t text[10001];
unsigned long n;
 
int change()
{
    char ch1, ch2, ch4;
    ch1 = ch2 = ch4 = '\0';
 
    do
    {
        //system("cls");
        wcout << L"Продолжить напоминать \"" << text << "\"?" << endl;
        wcout << L"1) Да, продолжить." << endl;
        wcout << L"2) Нет, сменить напоминание и интервал." << endl;
        wcout << L"3) Нет, завершить программу." << endl;
        ch4 = _getch();
        //getchar();
        //cin >> ch4;
    } 
    while (ch4 != '1' && ch4 != '2' && ch4 != '3');
 
    switch (ch4)
    {
    case '1': 
        {
            wcout << L"Выбран пункт \"1\" - продолжаю... ";
            Sleep(2000);
            return 1;
            break;
        }
    case '2': 
        {
            wcout << L"Выбран пункт \"2\" - смена напоминания и интервала его отображения. " << endl;
            do
            {
                wcout << L"Введите ваше напоминание(максимальная длина 10000 символов!):" << endl;
                wcin.sync();
                wcin.getline(text, 10001);
                wcout << endl;
                wcout << L"Если вы правильно ввели напоминание нижмите \"1\",\nдля повторного ввода - любую другую клавишу." << endl;
                //ch1 = _getch();
                cin >> ch1;
                system("cls");
            }
            while (ch1 != '1');
 
            do
            {
                system("cls");
                wcout << L"Ввод частоты напоминаний: \n1)В секундах\n2)В минутах\n3)В часах" << endl;
                //ch2 = _getch();
                cin >> ch2;
            }
            while (ch2 != '1' && ch2 != '2' && ch2 != '3');
            
            wcout << endl;
            
            switch (ch2)
            {
            case '1': 
                {
                    wcout << L"Выбран пункт \"1\" - введите интервал в секундах: ";
                    wcin >> n;
                    n *= 1000;
                    break;
                }
            case '2': 
                {
                    wcout << L"Выбран пункт \"2\" - введите интервал в минутах: ";
                    wcin >> n;
                    n *= 60000;
                    break;
                }
            case '3': 
                {
                    wcout << L"Выбран пункт \"3\" - введитеи интервал в часах: ";
                    wcin >> n;
                    n *= 3600000;
                    break;
                }
            }
            break;
 
            return 2;
        }
    case '3': 
        {
            exit(0);
            break;
        }
    }
    return 0;
}
 
int scen2()
{
    int a = 0;
    char ch1, ch2;
    ch1 = ch2 = '\0';
 
    do
    {
        wcout << L"Введите ваше напоминание(максимальная длина 10000 символов!):" << endl;
        wcin.getline(text, 10001);
        wcout << endl;
        wcout << L"Если вы правильно ввели напоминание нижмите \"1\",\nдля повторного ввода - любую другую клавишу." << endl;
        ch1 = _getch();
        system("cls");
    }
    while (ch1 != '1');
 
    do
    {
        system("cls");
        wcout << L"Ввод частоты напоминаний: \n1)В секундах\n2)В минутах\n3)В часах" << endl;
        ch2 = _getch();
    }
    while (ch2 != '1' && ch2 != '2' && ch2 != '3');
 
    wcout << endl;
 
    switch (ch2)
    {
    case '1': 
        {
            wcout << L"Выбран пункт \"1\" - введите интервал в секундах: ";
            wcin >> n;
            n *= 1000;
            break;
        }
    case '2': 
        {
            wcout << L"Выбран пункт \"2\" - введите интервал в минутах: ";
            wcin >> n;
            n *= 60000;
            break;
        }
    case '3': 
        {
            wcout << L"Выбран пункт \"3\" - введите интервал в часах: ";
            wcin >> n;
            n *= 3600000;
            break;
        }
    }
 
    wcout << L"Ok!;)";
 
    FreeConsole();
 
           do
    {
        Sleep(n);
        a = MessageBoxW(GetForegroundWindow(), text, L"Напоминание!", MB_RETRYCANCEL | MB_ICONWARNING | MB_DEFBUTTON1);
        if (a != 2) 
        {
            AllocConsole();
            change();
            FreeConsole();
        }
    }
    while(a != 2);
return 0;
}
 
int main()
{
    locale::global(locale("russian_Russia.866"));
 
    wcout << L"Укажите режим работы программы \"Напоминалка\":" << endl;
    wcout << L"1) Загрузить расписание из файла schedule.txt." << endl;
    wcout << L"2) Использовать одиночное напоминание." << endl;
    wcout << L"3) Комбинированный режим." << endl;
    wcout << L"4) Выход." << endl;
 
    char fl;
 
    do
    {
        fl = _getch();
    }
    while (fl != '1' && fl != '2' && fl != '3' && fl != '4');
 
    if (fl == '1')
    {
        //scen1();
        wcout << L"1 - В разработке..." << endl;
    }
    else if (fl == '2')
    {
        scen2(); //Написали, пытаемся разобраться с _getch()'ем
    }
    else if (fl == '3')
    {
        //scen3();
        wcout << L"3 - В разработке..." << endl;
    }
    else if (fl == '4')
    {
        exit(0);
    }
}
Добавлено через 12 минут
Теперь передаю в MessageBox() не NULL, а GetForegroundWindow(). Как я понял это должно всегда выводить сообщение поверх активного окна (с NULL не так?)...
P.S. -=ЮрА=-, если если есть замечания к коду говорите сразу! Я только учусь и с радостью исправлюсь если где-то напортачил, но это будет возможно только если мне об этом скажут.

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