Компилир. но не работают 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.