Компилир. но не работают 2 scanf подрят - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Суть кода: есть две структуры студент. Заполнение с клавиатуры. Нужно отсортировать по имени от А до Я. Но с вводом проблема. Первый студент заполняеться без проблем, а второй без фамилии(Прізвище).
#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;
}
Вот такое предупреждение выкинул 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 (по моему там не требуется доп. аргументов)"
float e=0;
scanf_s("%f",&e);
но я ставлю _s и при первом же вводе завершается программа. Помогите пожалуйста.
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;

Объяснение кода листинга программы

  1. Типизация структуры данных. Создание структуры ST с полями: name (строка до 100 символов), lastname (строка до 20 символов), year (целое число), num (целое число), mark (число с плавающей точкой).
  2. Объявление массива структур ST с именем mass и размером, определенным в переменной M.
  3. Объявление временной структуры ST с именем temp.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5