
scanf是用于程序在运行时获得从键盘键入的程序。
printf是用于打印数据在屏幕上。
什么时候该用scanf?那当然是在你的程序需要获得数据才能继续执行的时候才用scanf咯
例如:获得两个数字进行相加,部分代码:
int a,b;
scanf("%d,%d",&a,&b);//获得数据
printf("%d",a+b);//输出结果以上是一个简单的例子。
c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点。
scanf函数:用来接收用户输入的数据。
语法:scanf("格式化控制符",地址列表);
取地址要用到取地址符:&(shift+7)
例如:int num =0; csanf("%d",&num);printf("num = %d \n",num);
注意:格式化控制符前面要求输入什么类型的数据,那么地址列表那里就必须只能放相应类型变量地址。输入值的时候可以指定输入值的分隔符,
也可以 默认用回车。
scanf的特点:
它是一个阻塞式的函数。
例如:printf("请输入吧:\n");
int num ;
scanf("%d"&num);
printf("呵呵,你输入的是 %d",num);
一次输入多个值:int num ; float num1;(可以输入n次,n=格式化控制符的数量)
scanf("%d %f",&num,&num1);
注意:顺序不能乱;如果不想用空格在一行内输入,自己可以指定其他符号,但是输入的时候必须按照这个符号来,否则会异常(后面的变量接不到值);如果想在scanf中加文字,输入的时候也一定要按照scanf中的格式来输入;用scanf的时候,最好不要先接收一个任意数值类型(整型,实型),在接收一个char类型,如果非要接收char类型的,一定要在scanf的格式化控制符前面加一个空格。如果scanf要接收的是数字,不管你输入多少个空格和回车,都不会停止让你输入;如果scanf要接收的是int类型,你输入一个小数,那么只会截取小数的整数部分。如果接收的是数字,输入的是字符,会停止输入,但不会保存你输入的值。
scanf的运行原理:
scanf用于接收用户的输入,但是用户的输入不是直接给了变量,而是存在了缓冲区。步骤如下:
1、接收输入的时候,会先去缓冲区里面找,看缓冲区中是否合适的值,若有,那么就直接停止输入,然后把这里面的值赋给变量。若没有就一直让你输入,一直到有合适的为止。
scanf接收字符时的格式是scanf("%c",&ch)(ch是定义过的接收键盘输入字符的变量,下同);。这种格式下,无论输入缓冲区里有多少字符,scanf("%c",&ch);都只接收最前面的一个赋给ch,但系统要以'\n'作为输入结束的命令,那么scanf("%c",&ch);在接收一个输入字符时必然会把'\n'遗留在缓冲区里。
这样问题就来了,由于'\n'也是一个字符,所以下一个scanf("%c",&ch2);就会把上一个scanf("%c",&ch);遗留在缓冲区里的'\n'接收并赋给ch2,这就造成第二个scanf("%c",&ch2);失去了从键盘接收用户输入的字符的机会(scanf("%c",&ch2)只接收一个字符),从而造成代码运行出错。
解决办法很多,在scanf("%c",&ch);语句前加getchar();,加fflush(stdin);,甚至把scanf("%c",&ch);写两遍都能凑效。但这不仅要消费空间时间,而且阅读也不直观。其实知道了原理解决起来就方便了,最简单的办法是把每一个类似scanf("%c",&ch);这样读字符的语句改写成scanf(" %c",&ch)(%前有个空格);就可以了,原理是这个空格会命令scanf跳过所有的广义空格(' '、'\t'、'\n'等)再接收字符——当然没有空格就不会有跳过动作——问题就迎刃而解了。
下面提供验证代码:
//#include "stdafxh"//If the vc++60, with this line#include "stdioh"
int main(void){
char a,b;
scanf(" %c",&a);
scanf(" %c",&b);
printf("%c %c\n",a,b);
return 0;
}
不是scanf没有执行,而是因为你的两个if语句 if(number>5) if(number<6)后面都加了分号。分号表示if语句结束,相当于if条件满足之后执行一个空语句,然后继续执行printf语句。你把两个if语句后面的分号去掉再试试
以上就是关于C语言为什么有的时候没有scanf,而有时又有scanf,请问什么时候用scanf全部的内容,包括:C语言为什么有的时候没有scanf,而有时又有scanf,请问什么时候用scanf、c语言问题:怎样用scanf获取int类型的数组、C语言里面如何两次用scanf函数获取键盘输入的字符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)