关于c语言中scanf的问题
问题:输出结果和输入的不一致,如图
你确定你输入的 , 不是中文的么? scanf读取字符串是跳过所有空白直到第一个非空白字符读取一直读取到下一个空白字符,它把逗号也看作是一个字符来读取,最好数据间使用空格不要使用标点符号 请把scanf中引号内的逗号去掉或改成空格,然后再实际输入的时候用空格或tab或回车进行分隔 %s只有接收到回车时,才停止接收,你可以在输入完名字后回车,然后输入,和你的数值即可
从你的运行结果来看“我的天,11.1”是一个完整的字符串并且给了name
所以你输出的时候第二行才会出来我的天,11.1而不是
我的天
11.1
所以其实你的score并没有读进去数
因为逗号也是符号的一种啊亲 所以会被%s读进name里的
所以有%s的时候就尽量不要用逗号做分隔符了空格就好 scanf默认字符串是以'\n'字符和空格等一些特殊字符分割的,所以这里这个','也就当成一个字符变成输入到字符串中了
如果非要用','分割,可以这么写
scanf("%d,%[^,],%f", ...);
另外,这个程序存在溢出的漏洞,输入的字符串一定得检查长度
页:
[1]