4 / 4 / 3
Регистрация: 16.12.2020
Сообщений: 155
1

Ввод текста и чисел

01.05.2021, 17:21. Показов 783. Ответов 6

Здравствуйте. Делаю задание по C++ и не могу разобраться с одной проблемой.

Есть динамический массив структур. В функции vvod производится ввод с терминала данных в структуру, в функции vyvod - вывод данных на экран. Если вписывать в text1 и text2 просто по одной цифре, то программа работает. Но если вводить уже текст - то программа ломается на этапе выполнения. Подскажите пожалуйста, в чем может быть проблема?
Есть версия что в конце char-овских массивов просто нет терминирующего нуля. Пробовал поменять обычный cin>> на cin.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
34
35
36
37
38
39
40
41
42
43
#include<iostream>
using namespace std;
struct a
{
    char text1[100];
    char text2[1000];
    short date[3];
};
void vyvod(a* b, short num)
{
    for (short i = 0; i < num; i++)
    {
        cout << "Текст1: " << b[i].text1 << endl;
        cout << "Текст2: " << b[i].text2 << endl;
        cout << "Дата: " << b[i].date[0] << '.' << b[i].date[1] << '.' << b[i].date[2] << endl;
    }
}
void vvod(a* b, short num)
{
    for (short i = 0; i < num; i++)
    {
        cout << "Введите текст1: ";
        cin >> b[i].text1;
        cout << "Введите текст2: ";
        cin >> b[i].text2;
        cout << "Введите год: ";
        cin >> b[i].date[2];
        cout << "Введите месяц цифрами: ";
        cin >> b[i].date[1];
        cout << "Введите день: ";
        cin >> b[i].date[0];
    }
}
int main()
{
    setlocale(LC_ALL, "rus");
    short num = 1;
    a* b = new a[100];
    vvod(b, num);
    system("cls");
    vyvod(b, num);
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2021, 17:21
Ответы с готовыми решениями:

Ввод текста в Мемо1 и вывод текста в Мемо2 по возрастанию слов
Здравствуйте! Пользователь вводит текст в Мемо1, по нажатию кнопки текст должен выйти в Мемо2...

Ввод чисел и текста
Помогите добрые люди пожалуйста! 1.Вводятся числа конец ввода 0. Найдите максимальный элемент...

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

Ввод с клавиатуры 7 целых чисел и ввод этих чисел в обратном порядке
Я не могу выполнить одну задачу.Составте задачу для ввода с клавиатуры 7 целых чисел и ввода этих...

6
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
01.05.2021, 17:25 2
1) Использовать getline().
2) Читать про оставление \n: Распространенные ошибки
0
4 / 4 / 3
Регистрация: 16.12.2020
Сообщений: 155
01.05.2021, 21:08  [ТС] 3
Программа перестала ломаться, но только когда ввожу текст на английском. Если ввожу текст на русском, отображаются рандомные символы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void vvod(a* b, short num)
{
    for (short i = 0; i < num; i++)
    {
        cout << "Введите текст1: ";
        gets_s(b[i].text1);
        cout << "Введите текст2: ";
        gets_s(b[i].text2);
        cout << "Введите год: ";
        cin >> b[i].date[2];
        cout << "Введите месяц цифрами: ";
        cin >> b[i].date[1];
        cout << "Введите день: ";
        cin >> b[i].date[0];
    }
}
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
01.05.2021, 22:34 4
Пункт 2 не выполнен.
Про русские символы читай в прикреплённой теме: Русские шрифты в консоли
0
4 / 4 / 3
Регистрация: 16.12.2020
Сообщений: 155
07.05.2021, 13:36  [ТС] 5
nmcf, почему же не выполнен? Я прочитал. И понял что для меня необходимо. Но в данном примере это не требуется. А по поводу ввода русского языка -
C++
1
2
3
4
5
6
#include<windows.h>
int main()
   {
      SetConsoleCP(1251);
      SetConsoleOutputCP(1251);
   }
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
#include<iostream>
#include<windows.h>
using namespace std;
struct a
{
    char text1[100];
    char text2[1000];
    short date[3];
};
void vyvod(a* b, short num)
{
    for (short i = 0; i < num; i++)
    {
        cout << "Текст1: " << b[i].text1 << endl;
        cout << "Текст2: " << b[i].text2 << endl;
        cout << "Дата: " << b[i].date[0] << '.' << b[i].date[1] << '.' << b[i].date[2] << endl;
    }
}
void vvod(a* b, short num)
{
    for (short i = 0; i < num; i++)
    {
        cout << "Введите текст1: ";
        gets_s(b[i].text1);
        cout << "Введите текст2: ";
        gets_s(b[i].text2);
        cout << "Введите год: ";
        cin >> b[i].date[2];
        cout << "Введите месяц цифрами: ";
        cin >> b[i].date[1];
        cout << "Введите день: ";
        cin >> b[i].date[0];
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    short num = 1;
    a* b = new a[100];
    vvod(b, num);
    system("cls");
    vyvod(b, num);
    return 0;
}
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
07.05.2021, 20:44 6
Шрифт поменял?
38-39 и 40 взаимоисключающие, насколько я помню.
Цитата Сообщение от Rhoxolan Посмотреть сообщение
почему же не выполнен?
Сделай num больше 1 и посмотри.
0
4 / 4 / 3
Регистрация: 16.12.2020
Сообщений: 155
08.05.2021, 15:02  [ТС] 7
Цитата Сообщение от nmcf Посмотреть сообщение
Сделай num больше 1 и посмотри.
Да, программа поломалась. Этот код - примерный макет из основного кода, над которым я сейчас работаю. Там проблема решалась с помощью cin.ignore() перед вводом текста:

C++
1
2
3
4
5
        cout << "Введите текст1: ";
        cin.ignore();
        gets_s(b[i].text1);
        cout << "Введите текст2: ";
        gets_s(b[i].text2);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2021, 15:02
Помогаю со студенческими работами здесь

Ввод количества чисел, ввод самих чисел с MsgBox и нахождение их суммы
Задача в Excel vba

Исправить ввод только слова на ввод целого текста
Помогите исправить. Надо чтобы не одно слово можно водить, а текст. uses crt; var...

Ввод текста в другую программу или быстрый набор текста с 1 клавиши
Есть код который при нажатии LeftAlt нажимает кнопку b допустим. Пример ниже. Мне нужен код...

Ввод текста, обработка и вывод текста в то же поле
Здравствуйте!Как сделать в delphi 10 seattle нечто вроде экспертных систем?Вводим текст (типа как в...

Как сделать запрет на ввод чисел и на ввод английских букв ?
...

Для задания исходной матрицы предусмотреть ввод с клавиатуры или ввод с помощью датчика случайных чисел
Разработать алгоритм и написать программу на языке Turbo Pascal. Задана матрица (двумерный массив)...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru