在写代码的过程中有时候scanf函数的使用会出现一些语法问题,故写一篇博客来总结其的用法。
1.输入语法
int a = 0;
scanf("%d", &a);
在输入a时前面需要加上&以取到a的地址,
而值得一提的是若scanf中有其他并非占位符的元素出现,也需要将其一起输入,不然则会报错
int a ;
scanf("请输入%d", & a);
2.分别输入变量的值
当分别输入时,由于在输入完第一个数字变量后要按回车键,此时若第二个输入的若为字符变量,则会自动读取enter也就是换行符\n
代码演示:
int a;
char i;
scanf("%d", &a);
getchar();
scanf("%c",&i);
printf("%d ---%c---", a,i);
运行结果:
将---给换到了下一行,即证明了i为\n,为了正确输入,则需要加入getchar()将给\n给吞掉
代码演示:
int a;
char i;
scanf("%d", &a);
getchar();
scanf("%c",&i);
printf("%d ---%c---", a,i);
结果:
3.输入多个变量的值
1.字符
若字符与数字可以一起输入,但字符与字符不行,不知道为什么,但若两个字符一起输入,第二个字符的值总是显示?。
如:
char i,j;
scanf("%c %c",&i,&j);//中间有空格
printf("%c %c", i,j);
运行结果为:
解释:
scanf会读取所有字符包括空白字符。但是他会在读取到第一个空白字符后结束读取。将空白字符之后的所有字符都暂存在缓冲区中。
将scanf()中空格删掉即可成功运行
代码:
char i,j;
scanf("%c%c",&i,&j);//没加空格,若在第一个%c前加空格也没事
printf("%c %c", i,j);
结果:
但有一个问题,如果你使用的编程软件是vscode,其输入函数是scanf_s,就算将空格字符删掉,b依旧为?,这个时候需要引用 #define _CRT_SECURE_NO_WARNINGS (需放在首行),就可以使用scanf()函数,但若你坚持使用scanf_s,其具体解决方法我并不是很清楚,只能分开输入,并在中间加一个getchar()
2.字符串
scanf会读取除了空白字符以外的所有字符,并在读取到第一个空白字符时结束读取,将空白字符之后的所有字符都暂存在缓冲区中。除非缓冲区被刷新或者字符被读取走,否则将一直停留在缓冲区中。
在数字与字符串的占位符之间空格可有可无。
但对于字符串与字符则必须要有空格(当字符串在前面的时候),若没有空格仅会输出字符串
正常输入
char j;
char i[20];
scanf("%s %c",i,&j);//有空格
printf("%s %c", i,j);
结果:
如果没有空格
结果为:
但若当字符在前面的时候可以不用管空格
如
char j;
char i[20];
scanf("%c%s", &j, i);//没加空格
结果:
但由于scanf()函数输入%c的原因,还是最好不加空格。