EDIT:
Во-первых, вы пропустили аргумент длины, требуемый scanf_s
для %c
и %s
форматов.
Во-вторых, формат %c
принимает следующий символ из входного буфера. Во второй (и последующей) записи остался newline
, оставшийся во входном буфере от первого входа. Добавление space
перед спецификатором формата %c
очищает это ведущее пробельное пространство.
Другие форматы, такие как %s
и %d
сделать игнорировать ведущие пробелы, но не %c
.
В-третьих, с scanf
использование EOF
не путь, вы должны контролировать цикл с возвращаемым значением из scanf
который говорит вам количество элементов, успешно считаны.
Эта программа начинается с использования scanf_s
. Вторая запись игнорирует newline
после первой записи.
Затем он переходит к использованию getchar
. В этом тесте возвращаемое значение функции равно int
, так что это мой тип данных. Таким образом, EOF
(-1) не будет конфликтовать с любыми требуемыми символьными данными. Обратите внимание, что getchar
начинается с чтения newline
, оставленного после предыдущего scanf_s
(который игнорирует только пробел.
#include <stdio.h>
int main(void)
{
char ch_scanf; // char type
int ch_getchar; // int type
printf("Using scanf_s\n");
if (scanf_s(" %c", &ch_scanf, 1) == 1) { // consumes any leading whitespace
printf("scanf_s value: %d\n", ch_scanf);
}
if (scanf_s(" %c", &ch_scanf, 1) == 1) { // consumes any leading whitespace
printf("scanf_s value: %d\n", ch_scanf);
}
printf("\nUsing getchar\n");
while ((ch_getchar = getchar()) != EOF) {
printf("getchar value: %d\n", ch_getchar);
}
return 0;
}
Пример сессия:
Using scanf_s
A
scanf_s value: 65
B
scanf_s value: 66
Using getchar
getchar value: 10
C
getchar value: 67
getchar value: 10
^Z
Наконец, если вы хотите использовать стандартную функцию библиотеки scanf
без MSVC тикает тебя, вы можете сделать это, как этот
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
'tempString' должен быть' 'int' – pzaenger
полукокса tempString;' - >> 'int tempString;' во второй ptogram. В первой программе вы можете проверить возврат из scanf(). (и scanf_s() нонсенс) – wildplasser
@wildplasser scanf_s - это термин для визуальных студий –