空格在c语言中的scanf函数中做参数
来源:互联网 发布:js date对象方法 编辑:程序博客网 时间:2024/06/05 16:13
在程序员后面的皇后问题源程序中有这样一段代码
要注意我加上去的注释部分
.
.
if(k==n)/*找到一个解*/
{
printf("列/t行);
for(i=1;j<=n;j++)
printf("%3d/t%d/n",j,col[j]);
printf("enter a character(Q/q for exit)!/n");
scanf(" %c",&awn);/*注意这里scanf中的空格*/
if(awn==`Q`||awn==`q`)exit(0);
}
.
想 必大家才都能知道这段代码的功能,也就是说如果用户没有输入退出的条件(q或者Q)那么程序会将下一个皇后解都打出来直到出现Q/q或者全部解输出完为 止,问题就出在这里,scanf里面为什么要有一个空格呢?如果没有运行会是:当输入非退出条件会连续输出两个解,这是为什么?原因就在scanf。
空 格在scanf函数中是一个参数,我们都知道c语言的输入输出流有三种(stdio,stdin,stderr)scanf函数是在键盘缓冲区取数据,当 我们输入的数据在屏幕上显示的时候,实际上数据还在键盘缓冲区,当用户输入回车键的时候计算机会把缓冲区的数据(包括回车)输入到内存供程序的执行。而参 数%c是接受字符的,当他遇到回车scanf也能正常接收。
假设现在scanf没有空格
分析:现在我们再来看看我们的程序:假设 现在输入y继续执行程序函数scanf正确接收到了y,循环继续,但是下一个字符应该是回车,scanf函数循环接收到的回车!=q/Q,这样循环又继续 一次此时没有数据,那么计算机就等待用户输入数据。就这样用户输入一个数据就会出现两次,这是我们程序员不希望看到的。
解决:解决就是在%c的前面加上一个空格,空格是一个参数,它可以在scanf接收数据之前屏蔽回车(/0),这样就能达到我们的预想效果。
或许你认为这个问题不严重,但是如果出现在银行,那就惨了。
下面你做一个题目(很简单)
题目:模拟银行的零币兑换系统:每一次用户只能取0.5元,然后提示用户:是否继续取款(y/n)?输入y+确认(可以用计算机的回车代替)计算机就再给用户0.5元,输入n会退出零币兑换。
如果你设计不好用户输入一个y+确认,你就输出2张零币,那银行可要破产了。
如果你有兴趣可以把书上的皇后问题源程序运行一次,分别看看scanf在没有空格的条件下的运行结果你就明白了
要注意我加上去的注释部分
.
.
if(k==n)/*找到一个解*/
{
printf("列/t行);
for(i=1;j<=n;j++)
printf("%3d/t%d/n",j,col[j]);
printf("enter a character(Q/q for exit)!/n");
scanf(" %c",&awn);/*注意这里scanf中的空格*/
if(awn==`Q`||awn==`q`)exit(0);
}
.
想 必大家才都能知道这段代码的功能,也就是说如果用户没有输入退出的条件(q或者Q)那么程序会将下一个皇后解都打出来直到出现Q/q或者全部解输出完为 止,问题就出在这里,scanf里面为什么要有一个空格呢?如果没有运行会是:当输入非退出条件会连续输出两个解,这是为什么?原因就在scanf。
空 格在scanf函数中是一个参数,我们都知道c语言的输入输出流有三种(stdio,stdin,stderr)scanf函数是在键盘缓冲区取数据,当 我们输入的数据在屏幕上显示的时候,实际上数据还在键盘缓冲区,当用户输入回车键的时候计算机会把缓冲区的数据(包括回车)输入到内存供程序的执行。而参 数%c是接受字符的,当他遇到回车scanf也能正常接收。
假设现在scanf没有空格
分析:现在我们再来看看我们的程序:假设 现在输入y继续执行程序函数scanf正确接收到了y,循环继续,但是下一个字符应该是回车,scanf函数循环接收到的回车!=q/Q,这样循环又继续 一次此时没有数据,那么计算机就等待用户输入数据。就这样用户输入一个数据就会出现两次,这是我们程序员不希望看到的。
解决:解决就是在%c的前面加上一个空格,空格是一个参数,它可以在scanf接收数据之前屏蔽回车(/0),这样就能达到我们的预想效果。
或许你认为这个问题不严重,但是如果出现在银行,那就惨了。
下面你做一个题目(很简单)
题目:模拟银行的零币兑换系统:每一次用户只能取0.5元,然后提示用户:是否继续取款(y/n)?输入y+确认(可以用计算机的回车代替)计算机就再给用户0.5元,输入n会退出零币兑换。
如果你设计不好用户输入一个y+确认,你就输出2张零币,那银行可要破产了。
如果你有兴趣可以把书上的皇后问题源程序运行一次,分别看看scanf在没有空格的条件下的运行结果你就明白了
阅读全文
0 0
- 空格在c语言中的scanf函数中做参数
- 空格在scanf函数中作参数(c语言)
- C语言中scanf函数与空格回车
- C语言中scanf函数与空格回车
- c语言中scanf函数与空格回车
- 【C语言】——C语言中scanf函数在循环中的错误处理实例代码
- C语言scanf函数与空格
- C语言scanf函数与空格
- C语言scanf函数与空格
- C语言scanf函数与空格
- C语言中的scanf函数
- C语言中的scanf()函数
- C语言中的scanf函数
- C语言中的scanf函数:
- C语言中数组做函数参数
- 在C语言中关于scanf函数的高级应用
- 关于C语言中的函数scanf函数
- C语言中的printf与scanf函数
- linux 使用find命令查找包含某字符串的文件
- JSON.parse()和JSON.stringify()
- PHP递归逆置字符串
- Java多线程的调度与控制
- 系统权限管理设计
- 空格在c语言中的scanf函数中做参数
- 数据结构——队列(queue)
- SQL技巧:如何统计博客每天的总点击量和每天的总点击人数
- ECharts 柱状图动态获取json数据
- play1跳转指定其他模板
- spring aop JoinPoint 用法
- 阿里云服务器不能发送smtp协议邮件问题
- 又见回文(串)
- Android Framework--启动流程