Потому что нет нулевого терминатора. В C «строка» представляет собой последовательность непрерывных байтов (символов), которые заканчиваются символом-дозорным, который называется нулевым терминатором ('\0'
). Ваш код вводит данные пользователя и заполняет все 5 символов, поэтому в конце строки нет конца. Затем, когда вы печатаете строку, она будет печатать ваши 5 символов ("asdfg"
), и она будет продолжать печатать все мусор в стеке, пока не ударит нулевой ограничитель.
char str[6] = {'\0'}; //5 + 1 for '\0', initialize it to an empty string
...
printf("Enter five characters\n");
scanf("%5s", str); // limit the input to 5 characters
Самое приятное в спецификатор предельного формата заключается в том, что даже если вход длиннее 5 символов, в вашу строку будет сохранено только 5, всегда оставляя место для этого нулевого терминатора.
Похоже, вы на самом деле не изучали здесь метод Q. В вопросе Q вы просите участников оценивать утверждения в принудительном распределении, а не оценивать их по шкалам Лайкерта. После того, как вы выполнили эту форму сбора данных, факторный анализ обычно представляет собой просто варимакс или PCA, поэтому нет необходимости в других методах кластеризации.