Этот код будет, вероятно, работать лучше:
int nchars;
printf("\nEnter the lowercase letters\n");
for (index = 0; index < size; index++)
{
if (scanf_s("%c", &arr[index], 1) != 1)
break;
}
printf("\nThanks\n");
nchars = index; // Do not report on values that were not entered
for (index = 0; index < nchars; ++index)
{
printf("%c\n", arr[index]);
}
Обратите внимание, что при использовании scanf_s()
и формат %c
(и %s
и %[…]
форматы), он требует длину, а также указатель на место хранения данных (два аргумента для одной спецификации преобразования). Это указывает функции, сколько места доступно для хранения значения. Часто длина не будет равна 1; вы должны использовать scanf_s("%s", buffer, sizeof(buffer))
для чтения строки.
Рекомендуется проверять возвращаемое значение от scanf_s()
каждый раз, когда вы его используете, чтобы вы знали, работает оно или нет.
Вы можете добавить дополнительные критерии для разрыва цикла, например, если код читает новую строку.
Я также отметил некоторые проблемы в комментариях - проблемы исправлены в коде выше.
- Почему вы используете
_getch()
когда вы также сканирование с scanf_s()
? Это смутит бедного пользователя, который набирает abcd
и видит только ac
. _getch()
ест b
и d
.
- Кроме того, новая строка
\n
не /n
- третья printf()
имеет это как опечатку.
- Использование
\n
в конце строки входного формата - плохая идея; пользователь должен ввести то, что не является символом пробела после ввода, чтобы вернуть scanf_s()
.
Почему вы используете '_getch()', когда вы также сканируете с помощью функции 'scanf_s()'? Это запутает бедного пользователя, который набирает 'abcd' и видит только' ac'. '_getch()' ест 'b' и' d'. Кроме того, новая строка - '\ n' не'/n' - третья 'printf()' имеет это как опечатку. Использование '\ n' в конце строки входного формата - это плохая идея; пользователь должен ввести то, что не является символом пробела после ввода, чтобы вернуть 'scanf_s()' для возврата. –
Попробуйте выполнить промывку вашего выхода после второго цикла с помощью 'fflush (stdout)' – Cyclonecode
Очевидно, у вас есть Typo, и ваши символы не печатаются, потому что выходной буфер не сбрасывается '% c/n' ->'% c \ n' , Также 'Спасибо \ n' было бы лучше, так как он напечатал бы первый символ в следующей строке и не использовал бы' getch() 'это не стандартное использование' getchar() ', а также' scanf_s() '- > 'scanf()' learn standard c, чтобы вы могли кодировать любую платформу. И как я сказал вам, что вы делаете это раньше, 'scanf ("% c ", & arr [index]);' должен делать это без '_getch()' вещи. –