C/C++

Как ввести строчный массив через scanf_s в языке Си

Здравствуйте, я хочу сделать так, чтобы я мог присвоить строчное значение переменной ''month'', через scanf_s. К примеру простая задача: cоставить программу, которая бы по введенному времени года выдавала бы название месяцев, относящихся к нему.
То есть по моей логике надо просто ввести пользователю в scanf_s четыре варианта: Зима, Весна, Лето, Осень и потом просто через условный оператор закончить программу, но я не понимаю как именно ввести, потому что у меня ошибка. Помогите пожалуйста.

 #include "stdio.h" 
#include "locale.h"
int main() {
setlocale(LC_ALL, "Rus");
char month[10];
printf("Введите строку\n");
scanf_s("%s", month);
printf("Вы ввели %s", month);
}
https://onlinegdb.com/yCi42E-Pj

 #include  
#include
#include

int main()
{
setlocale(LC_ALL, "Rus");
char str[20];

printf("Введите время года: ");
scanf("%s", str);

if (!strcmp(str, "Зима"))
printf("Декабрь Январь Февраль\n");
else if (!strcmp(str, "Весна"))
printf("Март Апрель Май\n");
else if (!strcmp(str, "Лето"))
printf("Июнь Июль Август\n");
else if (!strcmp(str, "Осень"))
printf("Сентябрь Октябрь Ноябрь\n");
else
printf("Такого времени года не существует\n");
return 0;
}
Павел Шестопалов
Павел Шестопалов
73 465
Лучший ответ
Мереке Каденов объясните пожалуйста, что значит восклицательный знак в этой строчке, вообще объясните это условие, не понимаю
 if (!strcmp(str, "Зима")) 
 #include  
#include
#include
#define LENGTH 5U
#define BUFFER (LENGTH + 1U)
int main(void) {
char season[BUFFER] = {0};
system("chcp 1251 > nul");
printf("Время года: ");
scanf_s("%s", season, BUFFER);
printf("%s", "Месяцы: ");
if (!strncmp(season, "зима", LENGTH)) puts("декабрь, январь, февраль");
else if (!strncmp(season, "весна", LENGTH)) puts("март, апрель, май");
else if (!strncmp(season, "лето", LENGTH)) puts("июнь, июль, август");
else if (!strncmp(season, "осень", LENGTH)) puts("сентябрь, октябрь, ноябрь");
else puts("ошибка!");
system("pause > nul");
return 0;
}
Aleksandr Kostyuk а разве "зима" влезет в буфер размером 6 байт? Не говоря уже об "осени" или "весне".
char c[4];
scanf_s("%4c", c, (unsigned)_countof(c));
Сергей Савик
Сергей Савик
20 348
Мереке Каденов Зачем вы написали переменную с, и потом написали её еще раз, но уже в типе данных (unsigned)_countof ?
В языке Си нет функции scanf_s. Это выдумка компании Майкрософт.
В Си есть функция scanf, которая принимает значение текстовой переменной до пробела.

Чтобы ввести строку с пробелами, нужно использовать функцию fgets.
Например:
char str[15]={0};
fgets(str, sizeof(str), stdin);

А функция setlocale используется только вместе с библиотеками locale.h и wchar.h. То есть нужно обязательно добавить эти библиотеки директивами #include<locale.h> и #include<wchar.h>, и обязательно сохранять текст в переменной типа wchar_t * или в массиве типа wchar_t. Иначе применение функции setlocale бессмысленно, она не работает.
Тогда и текст нужно считывать аналогичной функцией wscanf или fgetws.
Например:

#include<locale.h>
#include<wchar.h>
#include<stdio.h>

int main()
{
setlocale(LC_ALL, "Russian");
wchar_t month[10]={0};
wprintf(L"Введите строку:\n);
fgetws(month, sizeof(month), stdin);
/*или wscanf(L"%ls", &month); если нет пробелов в вводимой строке */
wprintf(L"\nВы ввели %ls", month);

return 0;
}
Мереке Каденов нам в универе рассказывали про scanf_s, про scanf ни слова...