生如夏花133 发表于 2019-10-8 09:24:58

C语言_scanf函数

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:16:37

scanf函数中没有类似printf的精度控制

我叫MD 发表于 2019-10-8 10:39:37

楼主你好我这边试过了是正确的
这里我总结了2个原因,还望楼主排查下看看

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

生如夏花133 发表于 2019-10-8 11:35:53

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



我使用的是MinGW,然后在命令提示符当中运行的
并且提前设置了chcp 65001,utf-8显示格式,避免出现中文的乱码
并没有出现您提到的第二点失误呢

我叫MD 发表于 2019-10-8 13:02:46

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

可以把代码和运行结果贴出来看下吗?有图片的那种

ijy 发表于 2019-10-8 13:50:58

本帖最后由 ijy 于 2019-10-8 14:16 编辑

我用的是VC++6.0编译器,如图所示,应该是"输入"前加了个空格造成格式不匹配才出现了答案不对的情况;如果去掉这个空格答案就对了!

生如夏花133 发表于 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

生如夏花133 发表于 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作业>   

生如夏花133 发表于 2019-10-8 14:36:07

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

感觉我并没有加空格,尴尬

ijy 发表于 2019-10-8 14:48:14

生如夏花133 发表于 2019-10-8 14:36
感觉我并没有加空格,尴尬

你应该写"输入500”,结果就是500,而不应该写“500”,结果就变成了100,因为你的scanf函数里有输入两个字;

生如夏花133 发表于 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作业>   

一样的

ijy 发表于 2019-10-8 15:15:28

生如夏花133 发表于 2019-10-8 14:57
稍等稍等,我试一次给你看

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


我不知道你什么编译器?反正vc++6.0编译器把你的代码,和你的"输入500“复制进去回车后,结果就是500,估计你的输入法的问题,或许是全角输入了,而不是半角输入了?

生如夏花133 发表于 2019-10-8 15:59:43

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

我感觉应该也是编译器的问题{:10_243:}
页: [1]
查看完整版本: C语言_scanf函数