0 / 0 / 1
Регистрация: 04.10.2015
Сообщений: 20
1

Структуры

21.11.2016, 20:59. Показов 272. Ответов 3
Метки нет (Все метки)

Добрый день! Помогите решить задачу
При вводе фамилии программа выдает ошибку

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
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <memory.h>
#include <stdlib.h>
#include "clocale"
#include <crtdbg.h>
 
struct Borrower
{
    char fam[25];
    char name[25];
    char otch[25];
    float sum;
    float percent;
    float tCredit;
    float spCredit;
};
 
void printBorrower(Borrower *b);
 
int main(int argc, TCHAR* argv[])
{
 
    setlocale(LC_ALL, "russian");
    setlocale(LC_ALL, "rus");
 
    struct Borrower *zaim = NULL;
    int menu = 0;
    int num = 0;
    int number = 0;
 
    int wasEnt = 0;
    int wasCalc = 0;
    int Removing = 0;
    int Info = 0;
 
    do
    {
        printf("Кредитная ставка\n");
        printf("1. Ввести количество заемщиков\n");
        printf("2. Ввести информацию о заемщике и кредите\n");
        printf("3. Рассчитать сумму процентов за срок кредита\n");
        printf("4. Вывести полную информацию о заемщиках\n");
        printf(" 0. Выход\n\n");
        printf("Выберете пункт меню: ");
 
        scanf_s("%d", &menu);
 
        switch (menu)
        {
        case 1:
        {
            do
            {
                num = 0;
                printf("\nВведите количество заемщиков: ");
                scanf_s("%d", &num);
                if (num <= 0)
                {
                    printf("\n\aОШИБКА!: Значение должно быть больше нуля!\nвведите еще раз...\n");
                }
                else
                {
                    printf("ввод завершен...");
                    system("pause");
                }
            } while (num <= 0);
        }
        wasEnt = 1;
        wasCalc = 0;
        Removing = 0;
        Info = 0;
        break;
 
        case 2:
            if (1 == wasEnt)
            {
                if (zaim != 0)
                {
                    delete[] zaim;
                }
 
                zaim = new Borrower[num];
                for (int i = 0; i < num; ++i)
                {
                    printf("\nВведите информацию для %d-го заемщика:\n\n", i + 1);
 
                    printf("Введите фамилию: ");
                    scanf_s("%s", &zaim[i].fam);
 
                    printf("Введите имя: ");
                    scanf_s("%s", zaim[i].name);
 
                    printf("Введите отчество: ");
                    scanf_s("%s", zaim[i].otch);
 
                    printf("Введите сумму займа: ");
                    scanf_s("%f", &zaim[i].sum);
 
                    printf("Введите процентную ставку за год: ");
                    scanf_s("%f", &zaim[i].percent);
 
                    printf("Введите срок кредита (в месяцах): ");
                    scanf_s("%f", &zaim[i].tCredit);
                }
                printf("ввод завершен...");
                system("pause");
                wasCalc = 1;
                Removing = 0;
                Info = 0;
            }
            else
            {
                printf("\n\aОШИБКА!: Сначала введите количество заемщиков! Выберете пункт меню 1.\n");
                system("pause");
            }
            break;
 
        case 3:
            if (wasCalc)
            {
                for (int i = 0; i < num; ++i)
                {
                    zaim[i].spCredit = ((zaim[i].sum * zaim[i].percent / 100) / 12) * zaim[i].tCredit;
                }
                printf("\nРасчет закончен успешно!");
                system("pause");
                wasCalc = 0;
                Info = 1;
            }
            else
            {
                printf("\n\aОШИБКА!: Сначала введите информацию о заемщике и кредите! Выберете пункт меню 2.\n");
                printf("\n");
                system("pause");
            }
            break;
 
        case 4:
            if (Info)
            {
                printf("\nПолная информация о заемщиках:\n\n");
 
                number = 0;
                for (int i = 0; i < num; ++i)
                {
                    if (zaim[i].sum > 0)
                    {
                        printf("%d. ", ++number);
                        printBorrower(&zaim[i]);
                    }
                    else
                    {
                        printf("%d. Сумма займа не определена!\n", ++number);
                    }
                }
                system("pause");
                Info = 0;
                Removing = 1;
            }
            else
            {
                printf("\n\aОШИБКА!: Сначала выполните расчет! Выберете пункт меню 3.\n");
                printf("\n");
                system("pause");
            }
            break;
 
        case 0:
            break;
 
        default:
            printf("\n\aОШИБКА!: Неверный пункт меню!\n");
            printf("\n");
            system("pause");
        }
    } while (menu != 0);
 
    if (zaim != 0)
    {
        delete[] zaim;
    }
 
    return 0;
}
 
void printBorrower(Borrower *b)
{
    printf("Заемщик: %s %s %s\n   Сумма: %.2f руб.\n   Ставка: %.0f проц.\n   Срок: %.0f мес.\n   Сумма процентов: %.2f руб.\n\n",
        b->fam, b->name, b->otch, b->sum, b->percent, b->tCredit, b->spCredit);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2016, 20:59
Ответы с готовыми решениями:

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об...

Функция внутри структуры использует указатель, как поле этой структуры
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры)
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом...

3
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
21.11.2016, 21:11 2
Текст ошибки где?
0
С чаем беда...
Эксперт CЭксперт С++
9428 / 4925 / 1347
Регистрация: 18.10.2014
Сообщений: 11,465
21.11.2016, 22:21 3
Цитата Сообщение от Линлин Посмотреть сообщение
scanf_s
Если вы взялись пользоваться функцией scanf_s вместо нормального scanf, то читайте документацию на scanf_s и пользуйтесь ей правильно. У вас - неправильно.

Отдельный вопрос - почему у вас при чтении фамилии в аргументе scanf_s использован оператор &, а при чтении остальных строк - не использован. Как логикой вы руководствовались, когда решали, где использовать &, а где нет?
0
Модератор
Эксперт С++
11481 / 9399 / 5649
Регистрация: 18.12.2011
Сообщений: 25,108
21.11.2016, 22:31 4
Цитирую:
Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or [. The buffer size is passed as an additional parameter immediately following the pointer to the buffer or variable. For example, if reading a string, the buffer size for that string is passed as follows:

C
1
2
char s[10]; 
scanf_s("%9s", s, 10);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2016, 22:31

Вывод структуры, строка как элемент структуры
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения;...

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла?
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen (&quot;file.txt&quot;,...

Структуры. Работа с файлами, содержащими структуры
2) Дана совокупность сведений, каждое из которых состоит из следующих рекви-зитов: фамилия и...

Оператор if и структуры. Возвращение структуры из функции
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int StructSize) { ...

Структуры. Вызов данных структуры по указателю. с++
Условие задачи: Помогите, пожалуйста, с как реализовать печать вообще не представляю.

Понятие структуры данных. Элементарные структуры данных. Простые структуры данных
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных: методы...


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

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

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