scanf用法及常见输入错误问题
scanf()函数是通过终端格式化输入函数,它从标准输入设备(键盘)读取输入信息。可以读入任何固有类型的数据并自动把数值转变成适当的机内格式。
例1.
#include<stdio.h>
int main()
{int a, b, c;scanf("%d%d%d", &a, &b, &c);printf("%d,%d,%d\n", a, b, c);system("pause");return 0;
}
支持以下几种输入
所以:当使用"%d%d%d"这种输入格式时,输入可以是一个空格或者多个空格、tab键、回车键分割。输出都是正确的。
例2.
#include<stdio.h>
int main()
{int a, b, c;scanf("%d,%d,%d", &a, &b, &c);printf("%d,%d,%d\n", a, b, c);system("pause");return 0;
}
允许的输入方法:
所以:"%d,%d,%d"格式与"%d%d%d"格式基本相同,不同之处在"%d,%d,%d"这种格式在输入时“,”一定要紧跟输入的数字。
这里输入的","一定要是英文的
例3.
int main()
{int a, b, c;scanf("a=%d,b=%d,c=%d", &a, &b, &c);printf("%d,%d,%d\n", a, b, c);system("pause");return 0;
}
这里输入也要相互对应
例4.
#include<stdio.h>
int main()
{char a, b, c;scanf("%c%c%c", &a, &b, &c);printf("%c,%c,%c\n", a, b, c);system("pause");return 0;
}
这里输入时存在空格,换行等转义字符问题。因为在"%c"输入时,空格和转义字符均作为有效字符。
例如:
这说明在接收时将空格作为一个字符进行接收了(a->1,b->" ",c->2),其余的被丢弃。
还有类似的问题:
#include<stdio.h>
int main()
{int a;char c;scanf("%d", &a);scanf("%c", &c);printf("a=%d, c=%c,\n", a, c);printf("c=%d\n", c);system("pause");return 0;
}
这里输入:1回车就会出现如上结果,
这是因为scanf()从键盘接受数据将回车[\n]也接受了,所以c=’\n’,最后%d输出c的值就是10;
解决办法:
1.在接收第二个数之前清空缓冲区,fflush(stdin);getch();getchar();随便一个都可以,fflush(stdin)是全部清空,getchar()是清空一个字符,如果缓冲区还有多余的字符则会被正常使用,
2.在%c之前加入空格,空格可以吸收回车符、空格。
加getchar()
#include<stdio.h>
int main()
{int a;char c;scanf("%d", &a);getchar();scanf("%c", &c);printf("a=%d, c=%c,\n", a, c);printf("c=%d\n", c);system("pause");return 0;
}
加空格
#include<stdio.h>
int main()
{int a;char c;scanf("%d", &a);scanf(" %c", &c);printf("a=%d, c=%c,\n", a, c);printf("c=%d\n", c);system("pause");return 0;
}
例5
scanf()函数不能正确接收有空格的字符串问题。
char arr[20];scanf("%s", arr);printf("%s", arr);system("pause");return 0;
在scanf()函数接收输入数据时,遇到以下问题结束一个数据的输入:
1.遇见空格、回车、跳格
2.遇见宽度
3.遇见非法输入
所以不能成功接收有空格的字符串。
解决方法:
使用%[ ](扫描字符集合),可以用来进行多个字符串的输入,并对结束符进行自定义。对于%[ ]可以用^+结束标志(可以使任意字符,代表着输入这个字符就终止对字符串的读取)。
char arr[20];scanf("%[^\n]", arr);printf("%s", arr);system("pause");return 0;
scanf用法及常见输入错误问题相关推荐
- html前端输入错误,前端:常见的6种HTML5错误用法
一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的等价于 --具体地说,就是直接用作替代品(用于样式).在XHTML或者HTML4中,我们常看到这样 ...
- 英语常见介词错误用法,你有犯过吗?
英语常见介词错误用法,你有犯过吗? 1:错:come to here. 对:come here. 过来. here ,there,home之类的副词,前面不用介词in ,at,(但可以加from,比如 ...
- MySQL 性能优化:8 种常见 SQL 错误用法!
声明:转载自 MySQL 性能优化:8 种常见 SQL 错误用法! 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是 ...
- 避免常见的6种HTML5错误用法,避免常见的6种HTML5错误用法
一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的等价于 --具体地说,就是直接用作替代品(用于样式).在XHTML或者HTML4中,我们常看到这样 ...
- 8种常见SQL错误用法
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/cgAPOWPx 1.LIMIT 语句 分页查询是最常用的 ...
- 你应该避免的8种常见SQL错误用法!
来源:https://dwz.cn/cgAPOWPx 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方. 比如对于下面简单的语句,一般 DBA 想到的办法是在 type ...
- 8 种常见SQL错误用法,你千万别犯!
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:用好Java中的枚举,真的没有那么简单!个人原创+1博客:点击前往,查看更多 来源:https://yq.ali ...
- 8种常见SQL错误用法,你犯过几个?
来源:https://yq.aliyun.com/articles/72501 高考和端午小长假一溜烟的功夫就全过完了,新的一周,让我们迎着清晨的阳光,继续前行. 1.LIMIT 语句 分页查询是最常 ...
- mysql根据排序取前百分之二十_MySQL 性能优化 MySQL常见SQL错误用法
1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引.这样 ...
最新文章
- java 匿名内部类
- 我为中国第一张火星照片做鱼眼矫正
- 推荐一本书《网络机器人java编程指南》
- memcached 相关
- 三个线程按顺序输出数字
- [Leetcode][第557题][JAVA][反转字符串中的单词 III][遍历][String函数]
- 深度学习之Image captioning的评分指标篇(BLEU、CIDEr)
- 【spring】常用注解作用归纳
- android pcm数据格式,android 实时PCM数据编码成AAC
- 《JAVA程序设计基础(第3版)实验指导》pdf 附下载链接
- Springboot整合Drools规则引擎
- matlab解决线性规划问题
- 供应链金融——研究结果总结
- Linux设置串口波特率等参数
- 鬼谷八荒先天气运修改器
- 取消磁盘介质写入保护
- 插入安装光盘并重新启动计算机,电脑开机时显示 插入windows安装光盘并重新启动计算机 怎么解决 急救...
- 英雄联盟登陆服务器显示外文,英雄联盟手游进不去出现英文怎么办 进不去出现英文解决方法[多图]...
- android frida 检测_android逆向__超级好用的使用frida追踪方法
- Linux 系统使用 git 提交代码-- git 的安装及使用(简明教学指南)