鱼C论坛

 找回密码
 立即注册
查看: 1964|回复: 7

这两个程序求助,睡不着了~

[复制链接]
发表于 2015-2-10 19:45:18 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 solena 于 2015-2-10 20:40 编辑

编译环境VC++2013
程序一:
#include <stdio.h>
int main(void)
{
        int i, result;
        float fp;
        result = scanf_s("%d %f ", &i, &fp);
        printf("The number of fields input is %d\n", result);
        printf("The contents are: %d %f \n", i, fp);        
}
程序二;
#include <stdio.h>
void main()
{  
        int n, result;        
        result = scanf_s("%d", &n);
        printf("%d\n", result);
        printf("%f\n", n);


}


有几个问题求助:
1,程序一为什么有三个输入(明明输入就两个变量),result得到的值为什么是2呢?输出结果如下图
2,程序二为什么result得到的值为什么是1,输出n为什么是0.0000,输出结果如下图
3,scanf_s这个函数到底怎么用?4,麻烦各位网友帮忙,谢谢


程序一.png
程序二.png

最佳答案

查看完整内容

ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界。 result = scanf_s("%d %f ", &i, &fp); 的正确输入应该是:2空格4.0 scanf_s 的返回值是成功输入到变量的个数(上题是两个变量),第二题同理。 另外,scanf_s 输入含有字符,字符串,需要在后边追加一个参数限制缓冲区的长度,防止溢出。 请参考:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-10 19:45:19 | 显示全部楼层
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界。

result = scanf_s("%d %f ", &i, &fp); 的正确输入应该是:2空格4.0

scanf_s 的返回值是成功输入到变量的个数(上题是两个变量),第二题同理。

另外,scanf_s 输入含有字符,字符串,需要在后边追加一个参数限制缓冲区的长度,防止溢出。

请参考:
// crt_scanf_s.c
// This program uses the scanf_s and wscanf_s functions
// to read formatted input.
  
#include <stdio.h>

int main( void )
{
   int      i,
            result;
   float    fp;
   char     c,
            s[81];
   wchar_t  wc,
            ws[81];

   result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,
                     &wc, 1, s, 80, ws, 80 );
   printf( "The number of fields input is %d\n", result );
   printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c,
           wc, s, ws);
   result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
                      &wc, 1, s, 80, ws, 80 );
   wprintf( L"The number of fields input is %d\n", result );
   wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp,
            c, wc, s, ws);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-11 07:05:39 | 显示全部楼层
我也学习了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-11 08:42:47 | 显示全部楼层
我也学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-2-11 10:26:54 | 显示全部楼层
小甲鱼 发表于 2015-2-10 22:54
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界。

result ...

小甲鱼老师你好,还是有几个问题不清楚,程序一按道理应该接受两个输入,但是编译后它接收三个输入,输出结果是result=2,程序二为什么不管什么输入,n一直为0.0000:mad:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-12 12:52:44 | 显示全部楼层
1.你首先要知道了你定义的变量代表的含义是什么;在程序一中,你定义的result代表的是你要输入数据的个数所以result的值是2。至于为什么有3个输入,我也不知道了,我也是新手。互相学习吧。
2.在程序二中你定义的result在程序中的作用也是计算用户输入的数据个数,所以值为1;输出n的值为什么是0.0000;是因为你程序中定义的n的类型为整型,而在输出函数中却用了浮点型。所以得不到你想要的值。

评分

参与人数 1鱼币 +1 收起 理由
solena + 1 谢谢

查看全部评分

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

使用道具 举报

 楼主| 发表于 2015-2-12 19:02:42 | 显示全部楼层
1170802693 发表于 2015-2-12 12:52
1.你首先要知道了你定义的变量代表的含义是什么;在程序一中,你定义的result代表的是你要输入数据的个数所 ...

哦,没错,输入的是整数,输出的是F格式,得到的数据就不准确,谢谢,明白了,F改D就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-2-12 19:11:08 | 显示全部楼层
1170802693 发表于 2015-2-12 12:52
1.你首先要知道了你定义的变量代表的含义是什么;在程序一中,你定义的result代表的是你要输入数据的个数所 ...

result = scanf_s("%d %f ", &i, &fp);

刚才我发现,把%f后面的空格删掉就对了,你试试吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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