情况1:
在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔,若有其间有非格式字符则要原样输出。C编译在碰到非法数据(如对"%d"输入"12A"时,A即为非法数据)时即认为该数据结束。
/*scanf special use case 1*/
int h, w;
printf("please,input height and width:");
/*下述两种写法在输入数据时效果一致*/
scanf("%d%d", &h, &w);
scanf("%d %d", &h, &w);
/*中间有非格式字符*/
scanf("%da%d", &h, &w);
printf("height:%d;width:%d",h,w);
情况2:
字符串输入遇到空白字符就停止读取了,如输入abcd asdf,只输出abcd。
/*scanf special use case 2*/
char s[20];
printf("please input a sentence:");
scanf("%s", &s);
printf("s:%s", s);
情况3:
获取字符输入的特殊情况。假设输入1回车之后程序就结束了,不会如我们所意等待第二个参数的输入,因为通过键盘标准输入后,数据暂存在一个叫缓存区的地方,scanf从缓存区拿数据,输入1后的回车也是个字符\n因此两个字符分别两次被拿走,只有缓存区为空才会等待用户输入。
/*scanf special use case 3*/
printf("please input a number1:");
char num1;
scanf("%c", &num1);
printf("num1:%c", num1);
printf("\n");
printf("please input a number2:");
char num2;
scanf("%c", &num2);
printf("\n");
printf("num2:%c", num2);
情况4:
下面这种情况就是和情况3一样的,格式控制%c%c中间必须有空格%c %c隔开,否则我们输入的空格就被赋给了ch2。
/*scanf special use case 4/
printf("please input two character:");
char ch1, ch2;
scanf("%c%c", &ch1, &ch2);
printf("ch1:%c ch2:%c\n", ch1, ch2);