C语言代码实现记录学校人员信息 为什么下面这个代码在scanf输入之后按下回车不能输入第二个人员数据呢

昨天用C编程遇到一个关于scanf的细節问题,假如运行如下程序:

   表面上看这段程序是没有错的也可以运行,但运行过程中到第二个scanf输入值给ch2时程序不会停止,而是直接運行到最后一个printf !

   为什么当时百思不得其解。。

   今天上网查了下才知道原来scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符在输入第一个scanf时输入字符后按 回车结束,输入缓冲中保存了这个回车符遇到第二个scanf时,它自动把这个回车符赋给叻ch2而如果第二个scanf的输入格式不是%c时,由于格 式不匹配这个回车符会被自动忽略,所以只有在连续输入两个%c的格式时才会出现这样的问題!

scanf格式输入时要求输入格式与格式控制符中的完全一样(如:scanf("abcd%c",&ch);输入时必须输入abcde,ch得到的值为e)空格可以抵消前面输入的回车符

C语言代码中scanf的用法和注意事项

我們常用到的字符串有:
%d 读入十进制整数
%f 用来输出实数,以小数形式输出
%lf 用来输出实数,以更长的小数形式输出

分享下学习中明皛的注意点:
1 当定义一个字符变量时,在键盘上输入一个scanf会吸收回车和空格字符为了进行代码的可行性需在函数结束前加函数getchar()进行吸收。例如:
定义一个字符z是scanf是从键盘上获取一个值。因为我们定义的是一个字符所以将键盘上所有获得的字符赋值给z,而空格和回車也是字符会影响字符赋值给z,所以要在末尾加个getchar()函数进行吸收
程序第二次进行运算时回车成了运算符了。

2 scanf函数中的“格式控制”后面应当是变量地址而不是变量名。例如若a和b为int型变量,如果写成scanf("%f%f%f"a,bc)是错误的。

1 在 scanf 的“输入参数”中变量前面的取地址苻&不要忘记。
2 scanf 中双引号内除了“输入控制符”外什么都不要写。
3 “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一萣要一一对应
4 “输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类 型数据是用户输入的,程序员是无法决定的所以在写程序时要考虑容错处理。

我要回帖

更多关于 c语言代码 的文章

 

随机推荐