这段代码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);?
Chr*_*odd 20
scanf格式的空白字符使其显式读取并忽略尽可能多的空白字符.因此scanf("%d ", ...,在读取数字之后,它将继续读取字符,丢弃所有空格,直到它在输入上看到非空白字符.该非空白字符将留作输入函数读取的下一个字符.
使用您的代码:
printf("enter a value for j ");
scanf("%d  ",&j);
printf("j is %d \n", j);
它将打印第一行,然后等待您输入一个数字,然后继续等待数字之后的某些内容.因此,如果您只是键入5Enter,它将显示为挂起 - 您需要键入另一行,其中包含一些非空格字符才能继续.如果您输入6Enter,那么它将成为值i,因此您的屏幕将如下所示:
enter a value for j 5
6
j is 5
enter a value for i i is 6
此外,由于大多数的scanf%-conversions也跳过前导空白(所有除%c,%[和%n),空格之前%-conversions是无关的("%d"并且"  %d"将起相同作用的).所以在大多数情况下,你应该避免scanf转换中的空格,除非你知道你因为它们的特殊效果而特别需要它们.
格式字符串中的空白字符(空格,换行符,水平和垂直制表符)与输入中的任意数量的空白字符相匹配.
在你的第一个案例
  scanf("%d  ",&j);
当它遇到白色空间字符(WSC)时,' '它会吃掉用户输入的所有空白区域,包括\n按下Enter时它将进入非WSC.在这种情况下,您的程序将按Ctrl+键终止Z.  
| 归档时间: | 
 | 
| 查看次数: | 12231 次 | 
| 最近记录: |