一 基本用法
scanf函数:接收用户的输入
语法:
scanf(“格式化控制符”,地址列表);
例:
int num;
scanf(“%d”,&num);//代表接收用户输入一个整数,把这个整数赋值到num所在的空间
如果要接收字符呢???
char ch;
scanf(“%c”,&ch);
tips:千万要记住:scanf的格式化控制符后面不要加/n
scanf函数有一个特点:它叫阻塞式函数
意思就是:当程序执行到它这一句的时候,会暂时停止,不会继续往下执行,直到用户输入完才会继续往下执行
二 详解
尽量在让用户输入给一个提示
printf补充:可以同时挖N个坑(同时在内存中开辟N个空间),但是你给的值的顺序必须一致,而且类型也必须一致
1、也可以同时输入两个整数,分别输入两次就行了,或者用空格隔开
2、scanf里面的格式化控制符也可以用其他符号隔开,但是不管你用什么格式,输入的时候必须以你的那个格式来输入,否则会输入异常
3、最好不要先接收输入任何一个类型的数据后,立即再接收输入一个字符
4、最好不要把字符型和其他类型放在一起输入(tips:为什么呢?请看下面的运行原理)
三 运行原理
首先,scanf在内存中有个位置,叫缓冲区,里面是保存所有用户输入的数据的
用scanf接收用户输入的时候:
1.先去缓冲区里面找有没有合适的数据,如果有,则直接把缓冲区的这个数据赋值给你的变量(意味着不要用户输入了)
2.如果没有,才会让用户进行输入,输入以后,数据先放在缓冲区
3.然后再从这个缓冲区里面找数据
tips:如果要接收的是数字,但是输入的是字符,那么会忽略(不给那个变量赋值)
以后如果要接收一个字符的话,一定要记得在前面加空格(tips:会过滤掉所有的空格和回车)
tips:代码例子如下
#include <stdio.h>
int main(int argc, const char * argv[]) {
/*
int num1;
scanf(“%d”,&num1);
char ch;
scanf(“%c”,&ch);
printf(“num1=%d ch=%c/n”,num1,ch);
*/
/*
int num;
char ch;
scanf(“%d%c”,&num,&ch);//会让用户输入,依次输入200空格a回车
printf(“num=%d ch=%c/n”,num,ch);//num=200 a=空格
char ch2;
scanf(“%c”,&ch2);//不会让用户输入
printf(“ch2=%c/n”,ch2);//ch2里保存的是a
char ch3;
scanf(“%c”,&ch3);//不会让用户输入
printf(“ch3=%c/n”,ch3);//ch3里面保存的是回车
*/
/*
char ch;
scanf(“%c”,&ch);//输入完以后a,a,2,0
int num;
scanf(“%d”,&num);//这里还会让我继续输入,因为上面缓冲区留下来的/n和int类型不符合,所以会让我输入
printf(“ch=%c num=%d/n”,ch,num);
*/
// int num = 200;
// scanf(“%d”,&num);//如果输入的是字母,直接忽略
//
// printf(“num=%d/n”,num);
/*
char ch;
scanf(“%c”,&ch); //aa20
int num = 200;
scanf(“%d”,&num);
char ch2;
scanf(“%c”,&ch2);
printf(“ch=%c num=%d ch2=%c/n”,ch,num,ch2);//a 200 a
*/
/*
int num;
scanf(“%d”,&num);
char ch;
scanf(“%c”,&ch);//如果接收字符的话,很容易吸收掉上一次输入的空格或者回车,那么要解决这个问题怎么办???
printf(“num=%d ch=%c/n”,num,ch);
*/
//解决办法一:
/*
int num;
scanf(“%d”,&num);
char temp;
scanf(“%c”,&temp);//帮我们吸收掉回车了
char ch;
scanf(“%c”,&ch);//如果接收字符的话,很容易吸收掉上一次输入的空格或者回车,那么要解决这个问题怎么办???
printf(“num=%d ch=%c/n”,num,ch);
*/
//解决办法二
// int num;
// scanf(“%d”,&num);
//
// char ch;
// scanf(” %c”,&ch);//会自动过滤掉所有的空格和回车
//
// printf(“num=%d ch=%c/n”,num,ch);
//解决办法三(推荐方法)
// int num;
// scanf(“%d”,&num);
//
// rewind(stdin); //自动帮助我们清空缓冲区的数据
// char ch;
// scanf(“%c”,&ch);
//
// printf(“num=%d ch=%c/n”,num,ch);
return 0;
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13538.html