Выдает ошибку в 'initials2'

#define _CRT_SECURE_NO_WARNINGS

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

int main()
{
    setlocale(LC_ALL, "Rus");

    char name1[7], name2[9], name3[12];
    char initials1[6], initials2[6], initials3[6];
    unsigned short year1, year2, year3;
    float number1[7], number2[7], number3[7];

    printf("1. Введите: фамилию, инициалы, год рожд., оклад > ");
    scanf("%s %s %hu %f ", name1, initials1, &year1, &number1);
    printf("\n2. Введите: фамилию, инициалы, год рожд., оклад > ");
    scanf("%s %s %hu %f", name2, initials2, &year2, &number2);
}

Ошибка:

Run-Time Check Failure #2 - Stack around the variable 'initials2' was corrupted

В чем ошибка у меня? Я ввожу в первое: Иванов
И.И.
1975 517.50
Во второе ввожу: Петренко П.П. 1956 219.10 Но ошибку мне выдает на "П.П." и выкидывает из программы.


Ответы (1 шт):

Автор решения: EOF

Вызов setlocale(LC_ALL, "Rus"); установил русскую локаль. В Вашем случае это значит, что в числах с плавающей точкой теперь будет использоваться запятая вместо точки. Теперь точка не является частью числа, и поэтому при чтении введённых данных, при обнаружении точки в Вашем вводе, scanf думает, что прочитала число до конца и оставляет точку (и всё после неё) в потоке ввода.

Если желательно при Rus локали оставить как разделитель целой части точку, то после setlocale(LC_ALL, "Rus"); надо вызвать setlocale(LC_NUMERIC, "C");


¹ Спасибо @avp за доп. информацию.

→ Ссылка