鱼C论坛

 找回密码
 立即注册
查看: 2080|回复: 12

[已解决]C语言_scanf函数

[复制链接]
发表于 2019-10-8 09:24:58 | 显示全部楼层 |阅读模式

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

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

x
scanf函数对format参数的使用说明中提到:
format 参数是一个格式化字符串,由格式化占位符和普通字符组成。
除了格式占位符(% 开头)外的非空白字符:指定函数必须从输入流中读取到的字符,如果读取不匹配,则函数调用失败,并从匹配失败处截断输入流
我将下列代码中的scanf("%d", p)   改为 scanf("12%d", p),并在运行中写 12500 ,能获得500的正确答案
可是我若改成scanf("输入%d", p),并在运行中写  输入500 ,并不能获取500的正确答案,只能获取100,应该是因为读取不匹配,被截断了输入流,请问这里为什么会读取不匹配呢?

#include <stdio.h>
int main()
{
        int a,*p ;
        a =100;
        p = &a;
        printf("请输入a的值:");
        scanf("%d", p);
        printf("a的值为:%d", a);
        return 0;
}
最佳答案
2019-10-8 10:39:37
楼主你好  我这边试过了  是正确的  
这里我总结了2个原因,还望楼主排查下看看

1. 编译器不同可能会导致不同成果(这是C标准的语法,这个可能性极小  我用的 VS2015)
2. 楼主在scanf的时候是不是有空格之类的其他符号 而输入的时候没输入进去等  
3. 如果还没解决  还希望楼主贴张图出来,这样更方便观察

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

使用道具 举报

发表于 2019-10-8 10:16:37 | 显示全部楼层
scanf函数中没有类似printf的精度控制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-8 10:39:37 | 显示全部楼层    本楼为最佳答案   
楼主你好  我这边试过了  是正确的  
这里我总结了2个原因,还望楼主排查下看看

1. 编译器不同可能会导致不同成果(这是C标准的语法,这个可能性极小  我用的 VS2015)
2. 楼主在scanf的时候是不是有空格之类的其他符号 而输入的时候没输入进去等  
3. 如果还没解决  还希望楼主贴张图出来,这样更方便观察

scanf.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-8 11:35:53 | 显示全部楼层
我叫MD 发表于 2019-10-8 10:39
楼主你好  我这边试过了  是正确的  
这里我总结了2个原因,还望楼主排查下看看

我使用的是MinGW,然后在命令提示符当中运行的
并且提前设置了chcp 65001,utf-8显示格式,避免出现中文的乱码
并没有出现您提到的第二点失误呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-8 13:02:46 | 显示全部楼层
生如夏花133 发表于 2019-10-8 11:35
我使用的是MinGW,然后在命令提示符当中运行的
并且提前设置了chcp 65001,utf-8显示格式,避免出现中文 ...

可以把代码和运行结果贴出来看下吗?  有图片的那种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-8 13:50:58 | 显示全部楼层
本帖最后由 ijy 于 2019-10-8 14:16 编辑

我用的是VC++6.0编译器,如图所示,应该是"输入"前加了个空格造成格式不匹配才出现了答案不对的情况;如果去掉这个空格答案就对了!
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-8 14:33:11 | 显示全部楼层
我叫MD 发表于 2019-10-8 13:02
可以把代码和运行结果贴出来看下吗?  有图片的那种

#include <stdio.h>
int main()
{
        int a,*p ;
        a =100;
        p = &a;
        printf("请输入a的值:");
        scanf("输入%d", p);
        printf("a的值为:%d", a);
        return 0;
}

D:\1_data\C\z_exercise\鱼C求助\1008_2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-8 14:35:33 | 显示全部楼层
我叫MD 发表于 2019-10-8 13:02
可以把代码和运行结果贴出来看下吗?  有图片的那种

我好像发不了照片

结果我复制了一下

D:\1_data\C\鱼C作业>gcc zhizhen.c -o 111

D:\1_data\C\鱼C作业>111
请输入a的值:500
a的值为:100
D:\1_data\C\鱼C作业>     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-8 14:36:07 | 显示全部楼层
ijy 发表于 2019-10-8 13:50
我用的是VC++6.0编译器,如图所示,应该是"输入"前加了个空格造成格式不匹配才出现了答案不对的情况;如果 ...

感觉我并没有加空格,尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-8 14:48:14 | 显示全部楼层
生如夏花133 发表于 2019-10-8 14:36
感觉我并没有加空格,尴尬

你应该写"输入500”,结果就是500,而不应该写“500”,结果就变成了100,因为你的scanf函数里有输入两个字;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-8 14:57:47 | 显示全部楼层
ijy 发表于 2019-10-8 14:48
你应该写"输入500”,结果就是500,而不应该写“500”,结果就变成了100,因为你的scanf函数里有输入两个 ...

稍等稍等,我试一次给你看

D:\1_data\C\鱼C作业>111
请输入a的值:500
a的值为:100
D:\1_data\C\鱼C作业>111
请输入a的值:输入500
a的值为:100
D:\1_data\C\鱼C作业>   

一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-8 15:15:28 | 显示全部楼层
生如夏花133 发表于 2019-10-8 14:57
稍等稍等,我试一次给你看

D:\1_data\C\鱼C作业>111

我不知道你什么编译器?反正vc++6.0编译器把你的代码,和你的"输入500“复制进去回车后,结果就是500,估计你的输入法的问题,或许是全角输入了,而不是半角输入了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-8 15:59:43 | 显示全部楼层
ijy 发表于 2019-10-8 15:15
我不知道你什么编译器?反正vc++6.0编译器把你的代码,和你的"输入500“复制进去回车后,结果就是500,估 ...

我感觉应该也是编译器的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 13:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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