Функция scanf_s не работает нормально с массивом - C (СИ)

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

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

Во время работы с массивами обнаружил, что не работает, казалось бы корректная программа. В итоге, в новом проекте создал простейшую программу.
#include <stdio.h>
#include <conio.h>

int main()
{
    int i;
    char a[5];
    for (i = 0; i < 5; i++)
    {
        printf("a[%d]=", i);
        scanf_s("%s", a);
    }
    printf("%s", a);
    _getch();
}
Она позволила выяснить что scanf_s не работает нормально с массивом... Есть какие-то варианты решения? И почему Visual Studio 2013 не позволяет использовать стандартный scanf?

Решение задачи: «Функция scanf_s не работает нормально с массивом»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    char c = 0;
    char s1[80] = { 0 };
    char s2[80] = { 0 };
 
    scanf_s("%c", &c, 1);       //при записи одного символа указывается просто спецификатор преобразования, после адрес куда записывается, и едничка, которая говорит о том, что должен быть один символ
    scanf_s("%s", s1, _countof(s1));    //при записистроки можно писать просто спецификатор преобразования, затем адрес куда записывать и такую интересную вещь как _countof(s1)
    scanf_s("%79s", s2, _countof(s2));  //то же самое, но в спецификатор преобразования нужно вписать максимальный размер строки(не забываем про нуль-символ)
    
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию main
  3. Объявляем переменные: c - символ, инициализирован нулем; s1, s2 - строки, инициализированы нулями.
  4. Используем функцию scanf_s для чтения данных:
    • Первое использование: считываем один символ с помощью спецификатора %c и адреса переменной c, указываем 1 в качестве второго аргумента, чтобы указать, что мы хотим прочитать один символ.
    • Второе использование: считываем строку с помощью спецификатора %s и адреса переменной s1, указываем _countof(s1) в качестве второго аргумента, чтобы указать размер массива.
    • Третье использование: считываем строку с помощью спецификатора %79s и адреса переменной s2, указываем _countof(s2) в качестве второго аргумента, чтобы указать размер массива.
  5. Программа завершается.

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


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

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

14   голосов , оценка 4.286 из 5
Похожие ответы