这段代码,如果我输入10A10的话,打印出来的就是10,A,10;
但是我并没有用分隔符标明输入的字符10A10对应的是哪一个,scanf是如何操作的?
平时如果使用%d%d%d来控制输入格式时,你每写一个就要敲一下空格,为什么下面代码不用?
#include<stdio.h>
int main()
{
int a,b;
char c;
scanf("%d%c%d",&a,&c,&b);
printf("%d,%c,%d",a,c,b);
}
本帖最后由 Shuranima 于 2020-7-7 20:17 编辑
scanf是以%(格式字符)来判断输入,如%d则是整型,而scanf则是以空格作为分割符,用来分隔多个变量,而一个例外则是使用%c字符型。
scanf("%d%c%d",&a,&b,&c);
10A10输入后按回车则会将10A10\n输入缓冲区,第一个%d接受10后,判断出A不为int型变量则结束不接手A,%c接则接受A,最后一个%d接受10后判断\n为回车则自然结束。
又例如你所说的为什么这样3个%d需要空格
scanf("%d%d%d",&a,&b,&c);
1 2 3 这样输入才能判断出1为a变量2为b变量3为c,以空格进行分割各个变量。
总的来说就是scanf会根据你的格式字符来进行判断接收。
|