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

Выводит МММММ вместо нужных символов

19.02.2020, 20:17. Показов 5742. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В результате: Номер:ММММММММММММ . Если бы он выводил хотя бы цифры, а в конце М, то это ладно. Но он вообще ничего не выводит. Сколько пытаюсь решить проблему, никак не получается..
Также не понятно, почему в случае если NB = 11 компилятор вывод ошибку "Необработанное исключение по адресу 0x00B471A7 в Lab1.exe: Код инструментирования RangeChecks обнаружил обращение к массиву по индексу, выходящему за его пределы.", если \0 я вставляю вручную в 11ый символ.
Фрагмент кода ниже.

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
#define N 1
int i=0;
        struct kartoteka {
    static const int NB = 12;
    char Numb[NB];
    int time = 0;
} A[N];
void inputnumb()
{
    int length = 0;
    int pospos = 0;
    char c[kartoteka::NB];
    int posarrays[10] = { 3,4,5,7,8,9,11,12,14,15 };
    int pos = posarrays[pospos];
    char mask[17] = "+7(***)***-**-**";
    printf("%s", mask);
    while (length != 10) {
        int ch = _getch();
        if (ch >= '0' && ch <= '9') {
            c[length] = ch;
            length++;
            mask[pos] = ch;
            system("cls");
            pospos++;
            pos = posarrays[pospos];
            cout << mask;
        }
    }
    c[11] = '\0';
    strcpy_s(A[i].Numb, c);
}
void show(kartoteka* A, const int ARR_SIZE)
{
    for (int j = 0; j < ARR_SIZE; j++)
    {
        cout << "Номер: "  << A[j].Numb << endl
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2020, 20:17
Ответы с готовыми решениями:

Почему вместо нужных значений программа выводит несколько раз -6.227744e+66?
считываю матрицу чисел из файла double bufDownloadVector; std::ifstream stream(&quot;C:\\Users\\...\\dollar.txt&quot;); ...

Кроме нужных данных, в конце файла вводит много символов "НННННННННН". При выводе из файла выводит непонятную сетку
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;Windows.h&gt; using namespace std; struct student { char...

Выводит вместо чисел, набор символов
public class Main { public static void main(String args) { LOL x = new LOL(); x.kek(1,2); ...

13
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
19.02.2020, 21:33
Эта программа ничего выводить не может (нет функции main).
1
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,527
Записей в блоге: 22
19.02.2020, 21:35
Цитата Сообщение от Bislan Посмотреть сообщение
если \0 я вставляю вручную в 11ый символ.
Я уже сталкивался с этим. У вас массив на 10 элементов. От 0 до 9.
И где остальной код?
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
19.02.2020, 21:38
Цитата Сообщение от Argus19 Посмотреть сообщение
У вас массив на 10 элементов
Цитата Сообщение от Bislan Посмотреть сообщение
char c[kartoteka::NB];
А NB равно 12.

Вангую, что проблема в том, что перепутан массив структур A состоящий из одного элемента и массив параметров функции show.
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
19.02.2020, 21:44
Цитата Сообщение от Bislan Посмотреть сообщение
Также не понятно, почему в случае если NB = 11 компилятор вывод ошибку "Необработанное исключение по адресу 0x00B471A7 в Lab1.exe: Код инструментирования RangeChecks обнаружил обращение к массиву по индексу, выходящему за его пределы.", если \0 я вставляю вручную в 11ый симво
Цитата Сообщение от Bislan Посмотреть сообщение
char c[kartoteka::NB];
char c[kartoteka::NB + 1]

Цитата Сообщение от Bislan Посмотреть сообщение
printf("%s", mask);
    while (length != 10) {
        int ch = _getch();
while (length < kartoteka::NB)

Цитата Сообщение от Bislan Посмотреть сообщение
c[11] = '\0';
    strcpy_s(A[i].Numb, c);
c[length ] = '\0';

Добавлено через 2 минуты
Цитата Сообщение от Bislan Посмотреть сообщение
int posarrays[10] = { 3,4,5,7,8,9,11,12,14,15 };
int posarrays[kartoteka::NB] =
1
1 / 1 / 0
Регистрация: 14.03.2019
Сообщений: 32
19.02.2020, 22:44  [ТС]
Спасибо большое, завтра попробую все ваши замечания на практике (сейчас нет доступа к компьютеру). Тут много неверных решений, т.к. я ещё обдумываю все мелочи. Вот весь код в его первоначальном виде:
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
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
#include <conio.h>
#define N 1
 
using namespace std;
int y, i=0;
 
//картотека абонентов
struct kartoteka {
    static const int SZ = 256;
    static const int NB = 11;
    char FirstName[SZ];
    char LastName[SZ];
    char Numb[NB];
    int time = 0;
} A[N];
 
void inputnumb()
{
    int length = 0;
    int pospos = 0;
    char c[kartoteka::NB];
    int posarrays[10] = { 3,4,5,7,8,9,11,12,14,15 };
    int pos = posarrays[pospos];
    char mask[17] = "+7(***)***-**-**";
    printf("%s", mask);
    while (length != 10) {
        int ch = _getch();
        if (ch >= '0' && ch <= '9') {
            c[length] = ch;
            length++;
            mask[pos] = ch;
            system("cls");
            pospos++;
            pos = posarrays[pospos];
            cout << mask;
        }
    }
    c[10] = '\0';
    strcpy_s(A[i].Numb, c);
    cout << A[i].Numb << endl << i << endl;
    cin >> y;
}
 
void input(kartoteka* A, const int ARR_SIZE)
{
    char S[kartoteka::SZ];
 
    for (; i < ARR_SIZE; i++)
    {
        cout << "Абонент №" << i+1 << endl<< "Имя: ";
        cin >> S;
        strcpy_s(A[i].FirstName, S);
        cout << "Фамилия: ";
        cin >> S;
        strcpy_s(A[i].LastName, S);
        cout << "Номер абонента:\n";
        inputnumb();
        cout << endl;
    }
 
    cout << "Хотите вернуться в глав. меню? 1 -да, 2 и др -нет: ";
    cin >> y;
}
 
void show(kartoteka* A, const int ARR_SIZE)
{
    if (i == 0)
        cout << endl << "Нет данных.";
    else
    for (int j = 0; j < ARR_SIZE; j++)
    {
        cout << "-------------------" << endl << "Абонент №" << j + 1 << endl
            << "Имя: " << A[j].FirstName << " " << endl
            << "Фамилия: " << A[j].LastName << " " << endl
            << "Номер: "  << A[j].Numb << endl
            << "Время разговора: " << A[j].time << endl;
    }
    cout << endl;
    cout << "Хотите вернуться в глав. меню? 1 -да, 2 и др -нет: ";
    cin >> y;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    kartoteka obj1[N];
    int a;
    y = true;
    while (y==1)
    {
        system("cls");
        cout << "Выберите пункт меню:" << endl
            << "1. Ввод данных в картотеку (ФИ, номер);" << endl
            << "2. Вывод данных из картотеки (ФИ, номер);" << endl
            << "3. Ввод номера телефона" << endl;
        cin >> a;
        switch (a)
        {
        case 1:
            input(obj1, N);
            break;
        case 2:
            show(obj1, N);
            break;
        case 3:
            inputnumb();
            break;
        }
    }
}
    }
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,527
Записей в блоге: 22
19.02.2020, 23:01
VS2010 выводит ошибки:
cpp(18): error C2864: kartoteka::time: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
1>d:\vs2010\mass1\mass1\mass1.cpp(114): error C2059: синтаксическая ошибка: }
1>d:\vs2010\mass1\mass1\mass1.cpp(114): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>d:\vs2010\mass1\mass1\mass1.cpp(114): error C2059: синтаксическая ошибка: }
0
1 / 1 / 0
Регистрация: 14.03.2019
Сообщений: 32
20.02.2020, 00:40  [ТС]
Цитата Сообщение от Argus19 Посмотреть сообщение
VS2010 выводит ошибки
Кхм. У меня VisualStudio 2019 и нет ни ошибок, ни предупреждений.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.02.2020, 09:23
Цитата Сообщение от Argus19 Посмотреть сообщение
VS2010 выводит ошибки:
cpp(18): error C2864: kartoteka::time: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
За последние десять лет с++ довольно сильно изменился. Не стоит проверять современный код на старых компиляторах.
1
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,527
Записей в блоге: 22
20.02.2020, 17:56
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Не стоит проверять современный код на старых компиляторах.
Понятно.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
20.02.2020, 18:34
Лучший ответ Сообщение было отмечено Bislan как решение

Решение

Как я и подозревал, вы путаете локальную переменную obj1[N] с глобальной переменной A[N]
Настоятельно рекомендую глобальные переменные объявлять только в случае, если уж действительно имеются трудности в передаче их через параметры функций. Но и тогда объявляйте их так, чтобы было понятно, что это глобальная переменная.
Что-нибудь типа GlobalKart. Но уж никак не i или y как у Вас.

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
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
#include <conio.h>
 
 
using namespace std;
//  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!      int y, i = 0;
 
//картотека абонентов
struct kartoteka {
    static const int SZ = 256;
    static const int NB = 12;
    char FirstName[SZ];
    char LastName[SZ];
    char Numb[NB];
    int time = 0;
};//      !!!!!!!!!!!!!!!!!!!!!!!!!            A[N];
 
void inputnumb(kartoteka* A,int i)
{
    int length = 0;
    int pospos = 0;
    char c[kartoteka::NB] = { 0 };
    int posarrays[10] = { 3,4,5,7,8,9,11,12,14,15 };
    int pos = posarrays[pospos];
    char mask[17] = "+7(***)***-**-**";
    printf("%s", mask);
    while (length != 10) {
        char ch =(char) _getch();
        if (ch >= '0' && ch <= '9') {
            c[length] = ch;
            length++;
            mask[pos] = ch;
            system("cls");
            pospos++;
            pos = posarrays[pospos];
            cout << mask;
        }
    }
    strcpy_s(A[i].Numb, c);
    cout << A[i].Numb << endl << i << endl;
}
 
void input(kartoteka* A, const int ARR_SIZE)
{
    for (int i=0; i < ARR_SIZE; i++)
    {
        cout << "Абонент №" << i + 1 << endl << "Имя: ";
        cin >> A[i].FirstName;
        cout << "Фамилия: ";
        cin >> A[i].LastName;
        cout << "Номер абонента:\n";
        inputnumb(A,i);
        cout << endl;
    }
}
 
void show(kartoteka* A, const int ARR_SIZE)
{
    if (ARR_SIZE == 0)
        cout << endl << "Нет данных.";
    else
        for (int j = 0; j < ARR_SIZE; j++)
        {
            cout << "-------------------" << endl << "Абонент №" << j + 1 << endl
                << "Имя: " << A[j].FirstName << " " << endl
                << "Фамилия: " << A[j].LastName << " " << endl
                << "Номер: " << A[j].Numb << endl
                << "Время разговора: " << A[j].time << endl;
        }
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    const int N = 2;
    kartoteka obj1[N];
    int a;
    bool y = true;
    while (y)
    {
        system("cls");
        cout << "Выберите пункт меню:" << endl
            << "1. Ввод данных в картотеку (ФИ, номер);" << endl
            << "2. Вывод данных из картотеки (ФИ, номер);" << endl
            << "3. Ввод номера телефона" << endl;
        cin >> a;
        switch (a)
        {
        case 1:
            input(obj1, N);
            break;
        case 2:
            show(obj1, N);
            break;
        case 3:
        {
            int i = 0;
            cout << "Номер абонента:";
            cin >> i;
            inputnumb(obj1, i );
            break;
        }
        }
        cout << "Введите 1 для продолжения, 0 - для выхода:";
        cin >> y;
    }
}
1
1 / 1 / 0
Регистрация: 14.03.2019
Сообщений: 32
22.02.2020, 00:58  [ТС]
Существенно изменил код, исправил с учётом замечаний. Но выводит всё равно чушь) Уже сколько пытаюсь разобраться...
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
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
#include <conio.h>
 
using namespace std;
 
 
struct Kartoteka {
    char FirstName[32];
    char LastName[32];
    char Numb[11];
    int time = 0;
};
 
Kartoteka* AddStruct(Kartoteka* Obj, const int amount)
{
    if (amount == 0)
    {
        Obj = new Kartoteka[amount + 1]; // выделение памяти для первой структуры
    }
    else
    {
        Kartoteka* tempObj = new Kartoteka[amount + 1];
 
        for (int i = 0; i < amount; i++)
        {
            tempObj[i] = Obj[i]; // копируем во временный объект
        }
        delete[] Obj;
 
        Obj = tempObj;
    }
    return Obj;
}
 
void setData(Kartoteka* Obj, const int amount)
{
    char S[32],C[11];
    cout << "Абонент №" << amount + 1 << endl << "Имя: ";
    cin >> S;
    strcpy_s(Obj[amount].FirstName, S);
    cout << "Фамилия: ";
    cin >> S;
    strcpy_s(Obj[amount].LastName, S);
    cout << "Номер абонента: +7";
    cin >> C;
    strcpy_s(Obj[amount].Numb, C);
    cout << "Время разговора: ";
    cin >> Obj[amount].time;
    cout << endl;
}
 
void showData(const Kartoteka* Obj, const int amount)
{
    system("cls");
    if (amount == 0)
        cout << "Нет данных." << endl;
    else
    {
        cout << "№  " << "Фамилия\t" << "Имя\t" << "Номер абонента\t" << "Время разговора\t" << endl;
        cout << "==================================================================================" << endl;
        for (int i = 0; i < amount; i++)
        {
            cout << i + 1 << "  " << Obj[amount].LastName << '\t' << Obj[amount].FirstName << '\t' << Obj[amount].Numb << Obj[amount].time << '\t' << endl;
        }
    }
}
 
int Reaplay()
{
    int YesOrNot = 0;
    cout << "Вернуться в главное меню (1 - да, 0 - нет):";
    cin >> YesOrNot;
    return YesOrNot;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    Kartoteka* OurKartotekas = 0; //счетчик количества абонентов
    int YesOrNotMenu = 1; //продолжить или остановить выполнение меню
    int a;
    int kartotekaAmount = 0;
    int YesOrNot = 0; //  продолжить или остановить ввод данных
    while (YesOrNotMenu == 1)
    {
        system("cls");
        cout << "Выберите пункт меню:" << endl
            << "1. Ввод данных в картотеку (ФИ, номер);" << endl
            << "2. Вывод данных из картотеки (ФИ, номер);" << endl;
            //<< "3. Ввод номера телефона и времени разговора." << endl;
        cin >> a;
        switch (a)
        {
        case 1:
            do
            {
                OurKartotekas = AddStruct(OurKartotekas, kartotekaAmount);
                setData(OurKartotekas, kartotekaAmount);
                kartotekaAmount++;
                cout << "Продолжить ввод данных (1 - да, 0 - нет): ";
                cin >> YesOrNot;
                cin.get();
            } while (YesOrNot != 0);
 
            break;
        case 2:
            showData(OurKartotekas, kartotekaAmount);
            YesOrNotMenu = Reaplay();
            break;
        /*case 3:
            inputnumb();
            YesOrNotMenu = Reaplay();
            break; */
        } 
    }
    delete[] OurKartotekas;
    return 0;
}
Миниатюры
Выводит МММММ вместо нужных символов   Выводит МММММ вместо нужных символов  
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.02.2020, 01:15
ММММММММ...............
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.02.2020, 15:54
Цитата Сообщение от Bislan Посмотреть сообщение
Существенно изменил код, исправил с учётом замечаний. Но выводит всё равно чушь) Уже сколько пытаюсь разобраться...
Цитата Сообщение от Bislan Посмотреть сообщение
for (int i = 0; i < amount; i++)
        {
            cout << i + 1 << "  " << Obj[amount].LastName << '\t' << Obj[amount].FirstName << '\t' << Obj[amount].Numb << Obj[amount].time << '\t' << endl;
        }
C++
1
            cout << i + 1 << "  " << Obj[i].LastName << '\t' << Obj[i].FirstName << '\t' << Obj[i].Numb << Obj[i].time << '\t' << endl;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2020, 15:54
Помогаю со студенческими работами здесь

MessageBox выводит вместо русских символов иероглифы
Пробовал переключать юникод, пробовал подключать &lt;Tchar.h&gt;. И MessageBoxW, тоже не помогает. Итог один либо выводит шифр в MessageBox,...

Вместо введенных символов программа выводит пустую строку
очень простенькая программа, а что тут не так, я не пойму( #include &lt;stdio.h&gt; int main(void) { char mystring; ...

Вместо ожидаемого массива выводит набор символов непонятных
Здравствуйте, у меня такая проблема, есть условия, отсортировать слова в строке по количеству больших букв, я придумал алгоритм, не знаю...

Команда tail выводит кракозябры вместо кириллических символов
День добрый, при чтении лога командой tail -f /opt/tomcat8/logs/catalina.out русские буквы из этого файлы выводятся кракозябрами. Хотя если...

PHP выводит знаки вопросов вместо русских символов с таблицы mySQL
Доброго времени суток! Сколько гуглил, сколько разного перепрбывал, ничего не помогло.... Проблемка, собственно, распространенная......


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru