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

Scanf вызывает исключение при попытке записать в структуру текст

22.12.2022, 10:05. Показов 436. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
// __ _ _ ____
// / / __ _| |__ / | ___|
// / / / _` | '_ \| |___ \
// / /__| (_| | |_) | |___) |
// \____/\__,_|_.__/|_|____/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctime>
#include <conio.h>
#include <locale.h>
struct worker_info {
char name[10];
int year;
int month;
int day;
};
int main(){
setlocale(LC_ALL, "RU");
int mode, total_workers, max_work_expirience_number = 0;

do {
printf("Как будем заполнять данные?\n[\033[0;31m1\033[0;37m]Вручную\n[\033[0;31m2\033[0;37m]Из файла\nВыберите режим (\033[0;31m1-2\033[0;37m): ");
scanf_s("%d", &mode);
} while (mode != 1 && mode != 2);

switch (mode) {
case(1): {
do {
printf("Введите количество работников не более \033[0;31m100\033[0;37m: ");
scanf_s("%d", &total_workers);
} while (mode <= 0 || mode > 100);
worker_info worker_list[100];
for (int i = 0; i < total_workers; i++) {
do {
printf("\nВы заполняете данные работника \033[0;31m№%d\033[0;37m\n", i + 1);
printf("Введите имя работника: ");
scanf_s("%s\n", &worker_list[i].name);
printf("Введите дату поступления на работу в формате \033[0;31mdd.mm.yyyy\033[0;37m, не забудьте про високосные года и пенсионный возраст: ");
scanf_s("%d.%d.%d", &worker_list[i].day, &worker_list[i].month, &worker_list[i].year);
} while ((worker_list[i].year % 4 == 0 && worker_list[i].month == 2 && worker_list[i].day >= 30) ||
(worker_list[i].year % 4 != 0 && worker_list[i].month == 2 && worker_list[i].day >= 29) ||
((worker_list[i].month == 1 || worker_list[i].month == 3 || worker_list[i].month == 5 ||
worker_list[i].month == 7 || worker_list[i].month == 8 ||worker_list[i].month == 10 ||
worker_list[i].month == 12) && (worker_list[i].day >= 32 || worker_list[i].day <= 0)) ||
((worker_list[i].month == 4 || worker_list[i].month == 6 || worker_list[i].month == 9 ||
worker_list[i].month == 11) && worker_list[i].day >= 31 || worker_list[i].day <= 0) ||
(worker_list[i].year <= 1962 || worker_list[i].year >= 2023));
}
for (int i = 0; i < total_workers - 1; i++) {
if (worker_list[i].year <= worker_list[i + 1].year)
if (worker_list[i].month <= worker_list[i + 1].month)
if (worker_list[i].day <= worker_list[i + 1].day) {
worker_list[i + 1].year = worker_list[i].year;
worker_list[i + 1].year = worker_list[i].month;
worker_list[i + 1].year = worker_list[i].day;
max_work_expirience_number = i;
}
}
}
}
worker_info worker_list[100];
printf("%s", worker_list[max_work_expirience_number].name);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2022, 10:05
Ответы с готовыми решениями:

Вызывает исключение при попытке чтения из файла
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;cstdlib&gt; #include...

Записать текст в LPCTSTR с cin или scanf
Здравствуйте. Есть программа самописная, которая принимает пришедшую по ком порту информацию и в зависимости от пришедшего символа делает...

Есть идеи почему вызывает исключение, при выводе массива?
Проблема в том что не может вывести массив, постоянно вызывает ошибку! Буду премного благодарен, за указание на ошибки которые я не...

5
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,257
22.12.2022, 10:08
Цитата Сообщение от Nevenuga Посмотреть сообщение
scanf_s("%s\n", &worker_list[i].name);
Распространенные ошибки

Также, что здесь делает \n и что здесь делает оператор &???
1
 Аватар для Pphantom
2326 / 1568 / 722
Регистрация: 17.03.2022
Сообщений: 5,064
22.12.2022, 10:08
Nevenuga, начните с нормального оформления кода - и для размещения на форуме, и просто для использования. То, что вы выложили, нечитаемо.
0
0 / 0 / 0
Регистрация: 22.12.2022
Сообщений: 17
22.12.2022, 10:09  [ТС]
Да, я понимаю,что тут ошибка, что необходимо сделать,чтобы избавиться от этого недуга?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13182 / 6818 / 1821
Регистрация: 18.10.2014
Сообщений: 17,257
22.12.2022, 10:10
Цитата Сообщение от Nevenuga Посмотреть сообщение
что необходимо сделать,чтобы избавиться от этого недуга?
По ссылке дано подробное объяснение.
0
0 / 0 / 0
Регистрация: 22.12.2022
Сообщений: 17
22.12.2022, 11:21  [ТС]
Сделал все как написано, выводит кучу букв М, а так же заполняет все ячейки этими самыми буквами

// __ _ _ ____
// / / __ _| |__ / | ___|
// / / / _` | '_ \| |___ \
// / /__| (_| | |_) | |___) |
// \____/\__,_|_.__/|_|____/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctime>
#include <conio.h>
#include <locale.h>
struct worker_info {
char name[100];
int year;
int month;
int day;
};
int main(){
setlocale(LC_ALL, "RU");
int mode, total_workers, max_work_expirience_number = 0;

do {
printf("Как будем заполнять данные?\n[\033[0;31m1\033[0;37m]Вручную\n[\033[0;31m2\033[0;37m]Из файла\nВыберите режим (\033[0;31m1-2\033[0;37m): ");
scanf_s("%d", &mode);
} while (mode != 1 && mode != 2);

switch (mode) {
case(1): {
do {
printf("Введите количество работников не более \033[0;31m100\033[0;37m: ");
scanf_s("%d", &total_workers);
} while (mode <= 0 || mode > 100);
worker_info worker_list[100];
for (int i = 0; i < total_workers; i++) {
do {
printf("\nВы заполняете данные работника \033[0;31m№%d\033[0;37m\n", i + 1);
printf("Введите имя работника: ");
scanf_s("%s", worker_list[i].name, 100u);
printf("Введите дату поступления на работу в формате \033[0;31mdd.mm.yyyy\033[0;37m, не забудьте про високосные года и пенсионный возраст: ");
scanf_s("%d.%d.%d", &worker_list[i].day, &worker_list[i].month, &worker_list[i].year);
} while ((worker_list[i].year % 4 == 0 && worker_list[i].month == 2 && worker_list[i].day >= 30) ||
(worker_list[i].year % 4 != 0 && worker_list[i].month == 2 && worker_list[i].day >= 29) ||
((worker_list[i].month == 1 || worker_list[i].month == 3 || worker_list[i].month == 5 ||
worker_list[i].month == 7 || worker_list[i].month == 8 ||worker_list[i].month == 10 ||
worker_list[i].month == 12) && (worker_list[i].day >= 32 || worker_list[i].day <= 0)) ||
((worker_list[i].month == 4 || worker_list[i].month == 6 || worker_list[i].month == 9 ||
worker_list[i].month == 11) && worker_list[i].day >= 31 || worker_list[i].day <= 0) ||
(worker_list[i].year <= 1962 || worker_list[i].year >= 2023));
}
for (int i = 0; i < total_workers - 1; i++) {
if (worker_list[i].year <= worker_list[i + 1].year)
if (worker_list[i].month <= worker_list[i + 1].month)
if (worker_list[i].day <= worker_list[i + 1].day) {
worker_list[i + 1].year = worker_list[i].year;
worker_list[i + 1].year = worker_list[i].month;
worker_list[i + 1].year = worker_list[i].day;
max_work_expirience_number = i;
}
}
}
}
worker_info worker_list[100];
printf("%s", worker_list[max_work_expirience_number].name);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2022, 11:21
Помогаю со студенческими работами здесь

scanf, при попытке ввести что либо вместо цифр, вывести сообщение
В общем, вводим три числа, если вместе с числом ввели какой либо символ или букву, программа пишет сообщение о неправильном вводе и...

Сокеты. Исключение при попытке переподключения
Всем доброго времени суток! Столкнулся с проблемой в осваивании сокетов. Необходимо написать простое клиент-серверное приложение,...

Выбрасывается исключение при попытке подключения к БД
При запуске кода выдает исключение, classpath настроил. Не знаю, что делать. В чем может быть проблема? import java.sql.*; import...

Исключение при попытке вывести изображение
У меня выдает исключение на эту строку My_img.SetValue(Image.SourceProperty,...

Исключение при попытке удаления файла БД
Здравствуйте. Ковыряю приложение свое для работы с книгами и реализация бд к ним. Есть в приложении функция подобие сохранения и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru