Whitespace before %c specification in the format specifier of scanf function in C [duplicate]

巧了我就是萌 提交于 2019-11-26 11:39:31

问题


When I don\'t include white space between %d and %c specification in the format string of scanf() function in the following program, and give input during run-time as \"4 h\", then the output is \"Integer = 4 and Character= .

How exactly variable \"c\" takes the input in this case and what difference does it make if i include a white space between %d and %c specification ?

Code

#include <stdio.h>

int main()
{
    char c;
    int i;
    printf(\"Enter an Integer and a character:\\n\");
    scanf(\"%d %c\",&i,&c);
    printf(\"Integer = %d and Character = %c\\n\",i,c);
    getch();
} 

回答1:


If you read the specification for scanf() carefully, most format specifiers skip leading white space. In Standard C, there are three that do not:

  • %n — how many characters have been processed up to this point
  • %[…] — scan sets
  • %c — read a character.

(POSIX adds a fourth, %C, which is equivalent to %lc.)

Input white-space characters (as specified by isspace) shall be skipped, unless the conversion specification includes a [, c, C, or n conversion specifier.

Adding the space between %d and %c means that optional white space is skipped after the integer is read and before the (not white space) character is read.

Note that literal characters in a format string (other than white space — for example, the X and Y in "X%dY") do not skip white space. Matching such characters does not count as a successful conversion either; they do not affect the return value from scanf() et al.




回答2:


A space before %c specifier in scanf instruct it to skip any number of white-spaces. In other words, read from standard input until and unless a non-white-space character or keyboard interrupt is found.



来源:https://stackoverflow.com/questions/36504135/whitespace-before-c-specification-in-the-format-specifier-of-scanf-function-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!