Компилир. но не работают 2 scanf подрят - C (СИ)
Формулировка задачи:
Суть кода: есть две структуры студент. Заполнение с клавиатуры. Нужно отсортировать по имени от А до Я. Но с вводом проблема. Первый студент заполняеться без проблем, а второй без фамилии(Прізвище).
Вот такое предупреждение выкинул Visual Studio 2010:"Предупреждение 1 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\documents and settings\администратор.tabulorasa\мои документы\visual studio 2010\projects\struct_sort_name!\struct_sort_name!\struct_sort_name!.cpp 21
"
Препод 15 минут думал и говорит, что не знает.
Если написать 1 сканф для фамилии и имени, то его на втором шаге цыкла просто не будет(даже имя не смогу заполнить, потому разбил на 2 сканф)
В нете на этот варнинг нашёл:
"Ну так это же варнинги просто Ошибок-то нету. Вместо scanf напиши scanf_s (по моему там не требуется доп. аргументов)"
но я ставлю _s и при первом же вводе завершается программа. Помогите пожалуйста.
если удалить этот ввод, то работает... в чём же проблема...???
#include "stdafx.h" #include <stdio.h> #include <string.h> #include <locale.h> #define M 2 struct ST { char name[100]; char lastname[20]; int year; int num; double mark; }ST[M],temp; int main() { setlocale(LC_ALL,"Rus"); for(int i=0; i<M; i++) { printf("Студент №%d:\n", i+1); printf("\tПрiзвище студента\n");//от сюда scanf("%s",&ST[i].lastname);//до сюда пролетает на втором шаге цыкла printf("\tiм'я студента\n"); scanf("%s",&ST[i].name); printf("\tрiк народження студента:\n"); scanf("%d",&ST[i].year); printf("\tНомер групи:\n"); scanf("%d",&ST[i].num); printf("\tСереднiй бал успiшностi:\n"); scanf("%lf",&ST[i].mark); } for(int i=0; i<M; i++) { printf("Студент №%d:\n", i+1); printf("\tПрiзвище та iм'я студента: %s %s. ",ST[i].lastname,ST[i].name); printf("Рiк народження студента:%d\n",ST[i].year); printf("\tНомер групи:%d. ",ST[i].num); printf("Середнiй бал успiшностi:%2.1lf\n",ST[i].mark); } int count=0; for(int i=0; i<M; i++) { if(ST[i].mark<6){ printf("Студент з балом <6:\n"); printf("\tПрiзвище та iм'я студента: %s %s. ",ST[i].lastname,ST[i].name); printf("Рiк народження студента:%d.\n",ST[i].year); printf("\tНомер групи:%d. ",ST[i].num); printf("Середнiй бал успiшностi:%2.1lf\n",ST[i].mark); count++;} } if(count==0) printf("Таких студентiв немає!"); printf("\n\nВiдсортований список по iм'ях:\n"); for(int i=0; i<M-1;i++) { if(strcmp(ST[i].name,ST[i+1].name)==1) { temp=ST[i+1]; ST[i+1]=ST[i]; ST[i]=temp; } } //Отсорт. структура for(int i=0; i<M; i++) { printf("Студент №%d:\n", i+1); printf("\tПрiзвище та iм'я студента: %s %s. ",ST[i].lastname,ST[i].name); printf("Рiк народження студента:%d\n",ST[i].year); printf("\tНомер групи:%d. ",ST[i].num); printf("Середнiй бал успiшностi:%2.1lf\n",ST[i].mark); } return 0; }
float e=0; scanf_s("%f",&e);
printf("\tрiк народження студента:\n"); scanf("%d",&ST[i].year); printf("\tНомер групи:\n"); scanf("%d",&ST[i].num); printf("\tСереднiй бал успiшностi:\n"); scanf("%lf",&ST[i].mark);
Решение задачи: «Компилир. но не работают 2 scanf подрят»
textual
Листинг программы
typedef struct ST{ char name[100]; char lastname[20]; int year; int num; double mark; }; struct ST mass[M], temp;
Объяснение кода листинга программы
- Типизация структуры данных. Создание структуры ST с полями: name (строка до 100 символов), lastname (строка до 20 символов), year (целое число), num (целое число), mark (число с плавающей точкой).
- Объявление массива структур ST с именем
mass
и размером, определенным в переменной M. - Объявление временной структуры ST с именем
temp
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д