Если ваша цель состояла в том, чтобы прочитать двух «интересных» символов, и если вы не думаете, что пробельные символы, такие как пробел и символ новой строки, «интересны», вы попали на шестое место из семнадцати вещей о scanf
предназначены для отключения неосторожных: %c
делает чтение пробельных символов.
Если вы хотите, чтобы scanf
пропускал пробельные символы, так что %c
будет читатьследующий, непробельный или «интересный» символ, просто включите символ пробела в строку формата перед %c
:
char c;
scanf(" %c", &c);
printf("Value: %c\n",c);
scanf(" %c", &c);
printf("Value: %c\n",c);
В строке формата scanf
наличие символа пробелаозначает, что вы хотите, чтобы scanf
пропустил все пробелы в этой точке на входе.
Обычно вам не нужно беспокоиться о пропуске пробела с scanf
, потому что большинстводругие спецификаторы формата - %d
, %f
, %s
и т. д. - автоматически пропускают любые пробелы, если это необходимо, прежде чем они начнут анализировать свои входные данные. Но %c
особенный: кто-то подумал, что вы можете использовать его для чтения пробельных символов, поэтому он не пропускает их, поэтому, если вы не хотите их читать, вы должны пропустить их самостоятельно, с этим пробеломсначала в строке формата.