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

Интерфейс пользователя типа "меню" - C++

Восстановить пароль Регистрация
 
PsychodeliNoise
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 12
26.02.2014, 15:44     Интерфейс пользователя типа "меню" #1
C++ (Qt)
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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <stdlib.h>
 
using namespace std;
 
const int n = 4; 
 
void vvod(int a[n][n])
{
    int i, j;
 
    cout << " Просто введи эти 16 чисел, нигер: \n ";
 
    for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    cin >> a[i][j];
}
 
void vivod(int a[n][n])
{
    setlocale(0, "");  
 
    int i, j;
 
    cout << "\n Вывод матрицы на экран\n";
    for (i = 0; i < n; i++)
    {
        for (j =0; j < n; j++)
        cout  << " " << setw(5) << a[i][j];
        cout << "\n";
    }
}
 
int imin(int a[n][n])
{
    setlocale(0, "");  
 
    int
    i, j,
    min = a[0][0],
    imin, 
    imin1,
    sum = 0;
 
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < n; j ++)
        if (a[i][j] < min)  
        min = a[i][j];
    }
    
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < n; j ++)
        if (a[i][j] == min)
        imin = i;      
    }
 
    imin1 = imin+1;
    for (i = 0; i < n; i ++)
    sum += a[imin][i];
 
    cout << "\n Минимальный элемент " << min << ", строка " << imin1;
    cout << "\n Сумма элеметов в этой строке = ";
 
    return sum;
 
}
 
int main()
{       
    setlocale(0, "");
 
    int b[n][n];
 
    while (1)
    
    {
    puts(" в•”в•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•—\r\n");
    puts(" в•‘     ПРОГРАММА ОБРАБОТКИ МАТРИЦЫ                                 в•‘\r\n");
    puts(" в•*═════════╦══════════╦═════════════╦══════════╣\r\n");
    puts(" в•‘ 1-ввод       в•‘ 2-вывод       в•‘ 3-обработка       в•‘ 4-выход       в•‘\r\n");
    puts(" в•љв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•©в•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•©в•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•©в•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ђв•ќ\r\n");
    char menu=_getch();
    switch (menu)
        {
        case '1': vvod(b); break;
        case '2': vivod(b); break;
        case '3': cout << imin(b) << "\n "; break;
        case '4': exit(0);
        }
    }
 
    system("PAUSE");
 
    return 0;
}
Вот код. По идее, он рабочий, за исключением 2 "НО". В частности, вся суть кроется в главной функции:
1) VS 2012 не понимает символов, из которых составлено меню таблицы. Вместо них — вопросительные знаки.
2) Таблица выводится слишком часто. В идеале ей бы выводиться 1 раз, в начале, но таблица выводится и после нажатия Enter по завершении ввода чисел, и по факту нажатия клавиш "2" и "3". Ну вы сами убедиться можете. Я пробовал разными путями это исправить, но видно туповат я слегка. Прошу помочь. Важно лишь, чтобы в любой момент работы программы таблица высвечивалась лишь 1 раз.


P.S. Похоже, что символы таблицы не распознаются и тут. Вот так она в идеале должна выглядеть.
╔═════════════════════════════════════════════╗
║ ПРОГРАММА ОБРАБОТКИ МАТРИЦЫ ║
╠═════════╦══════════╦═════════════╦══════════╣
║ 1-ввод ║ 2-вывод ║ 3-обработка ║ 4-выход ║
╚═════════╩══════════╩═════════════╩══════════╝
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2014, 15:44     Интерфейс пользователя типа "меню"
Посмотрите здесь:

МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" C++
C++ Error: значение типа "const char" нельзя присвоить сущности типа "double"
C++ значение типа "char *" нельзя присвоить сущности типа "LPWSTR"
аргумент типа "char *" несовместим с параметром типа "LPCWSTR" C++
C++ Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" C++
Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
ткните мордой плз на описание конструкций типа defect?"brak":"goden" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.02.2014, 16:20     Интерфейс пользователя типа "меню" #2
Вообще, нужно менять кодировку, т.к у вас скорее всего window-1251, а она не поддерживает такие символы вроде бы, ну и надо преобразовывать int в char:

cout << char(12);
PsychodeliNoise
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 12
26.02.2014, 18:09  [ТС]     Интерфейс пользователя типа "меню" #3
recoder, перепробовал все варианты кодировки Unicode — не помогает. А динии таблицы точно юникодовские.
А зачем преобразовывать в char?
Yandex
Объявления
26.02.2014, 18:09     Интерфейс пользователя типа "меню"
Ответ Создать тему
Опции темы

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