鱼C论坛

 找回密码
 立即注册
查看: 3286|回复: 6

关于c语言中scanf的问题

[复制链接]
发表于 2017-11-15 23:50:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:


输出结果和输入的不一致,如图

QQ截图20171120235622.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-16 00:19:36 | 显示全部楼层
你确定你输入的 ,   不是中文的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-16 02:48:31 | 显示全部楼层
scanf读取字符串是跳过所有空白直到第一个非空白字符读取一直读取到下一个空白字符,它把逗号也看作是一个字符来读取,最好数据间使用空格不要使用标点符号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-16 09:34:16 | 显示全部楼层
请把scanf中引号内的逗号去掉或改成空格,然后再实际输入的时候用空格或tab或回车进行分隔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-17 14:18:55 | 显示全部楼层
%s只有接收到回车时,才停止接收,你可以在输入完名字后回车,然后输入,和你的数值即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 20:38:13 | 显示全部楼层
从你的运行结果来看  “我的天,11.1”是一个完整的字符串并且给了name
所以你输出的时候第二行才会出来  我的天,11.1  而不是
我的天
11.1
所以其实你的score并没有读进去数
因为逗号也是符号的一种啊亲   所以会被%s读进name里的
所以有%s的时候就尽量不要用逗号做分隔符了  空格就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 01:10:09 | 显示全部楼层
scanf默认字符串是以'\n'字符和空格等一些特殊字符分割的,所以这里这个','也就当成一个字符变成输入到字符串中了

如果非要用','分割,可以这么写
  1. scanf("%d,%[^,],%f", ...);
复制代码


另外,这个程序存在溢出的漏洞,输入的字符串一定得检查长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 08:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表