在sa f()格式字符串中尾随空格的效果如何?

在sa f()格式字符串中尾随空格的效果如何?

有什么区别scanf("%d")scanf("%d ")在这段代码中,格式字符串中的尾部空白有什么区别?

#include <stdio.h>int main(void){
    int i, j;

    printf("enter a value for j ");
    scanf("%d  ",&j);
    printf("j is %d\n", j);
    printf("enter a value for i ");
    scanf("%d", &i);
    printf("i is %d\n", i);
    return 0;}

如何scanf()函数在格式说明符后面添加空格时实际工作,如scanf("%d  ", &j);?


婷婷同学_
浏览 438回答 3
3回答

慕仙森

扫描格式的空白字符会导致它显式地读取和忽略尽可能多的空白字符。所以scanf("%d ", ...,在读取一个数字之后,它将继续读取字符,放弃所有空白,直到它在输入中看到一个非空白字符。该非空白字符将保留为输入函数要读取的下一个字符。使用您的代码:printf("enter&nbsp;a&nbsp;value&nbsp;for&nbsp;j&nbsp;");scanf("%d&nbsp;&nbsp;",&j);printf("j&nbsp;is&nbsp;%d&nbsp;\n",&nbsp;j);它将打印第一行,然后等待您输入一个数字,然后之后继续等待某事号码。所以如果你只是键入5进入,它将出现挂起-您需要键入另一行与一些非空白字符在其中继续。如果你然后键入6进入,这将成为i,所以您的屏幕将类似于:enter&nbsp;a&nbsp;value&nbsp;for&nbsp;j&nbsp;56j&nbsp;is&nbsp;5enter&nbsp;a&nbsp;value&nbsp;for&nbsp;i&nbsp;i&nbsp;is&nbsp;6此外,由于大多数scanf%-转换也跳过前导空格(除%c,&nbsp;%[和%n)、空间以前%-转换是不相关的("%d"和" &nbsp;%d"将采取同样的行动)。因此,在大多数情况下,除非您知道您特别需要它们的特殊效果,否则您应该避免扫描转换中的空格。

白衣染霜花

格式字符串中的空白字符(空格、换行符、水平和垂直制表符)与输入中任意数量的空白字符匹配。在你的第一个案例中&nbsp;&nbsp;scanf("%d&nbsp;&nbsp;",&j);当它遇到空白字符(Wsc)时' '然后,它将吃掉用户输入的所有空白,包括\n论压榨进入它将有望进入一个非WSC。在这种情况下,您的程序将通过按下克特&nbsp;+&nbsp;Z.

红糖糍粑

中的空格字符scanf格式匹配任意数量的空白字符,如isspace..因此,如果您有尾随空格、换行符、制表器或任何其他空格字符,那么它也将被scanf在它回来之前。
打开App,查看更多内容
随时随地看视频慕课网APP