这两个程序求助,睡不着了~
本帖最后由 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,麻烦各位网友帮忙,谢谢
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;
wchar_twc,
ws;
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);
} 我也学习了。 我也学习一下 小甲鱼 发表于 2015-2-10 22:54
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界。
result ...
小甲鱼老师你好,还是有几个问题不清楚,程序一按道理应该接受两个输入,但是编译后它接收三个输入,输出结果是result=2,程序二为什么不管什么输入,n一直为0.0000:mad: 1.你首先要知道了你定义的变量代表的含义是什么;在程序一中,你定义的result代表的是你要输入数据的个数所以result的值是2。至于为什么有3个输入,我也不知道了,我也是新手。互相学习吧。
2.在程序二中你定义的result在程序中的作用也是计算用户输入的数据个数,所以值为1;输出n的值为什么是0.0000;是因为你程序中定义的n的类型为整型,而在输出函数中却用了浮点型。所以得不到你想要的值。 1170802693 发表于 2015-2-12 12:52
1.你首先要知道了你定义的变量代表的含义是什么;在程序一中,你定义的result代表的是你要输入数据的个数所 ...
哦,没错,输入的是整数,输出的是F格式,得到的数据就不准确,谢谢,明白了,F改D就好了 1170802693 发表于 2015-2-12 12:52
1.你首先要知道了你定义的变量代表的含义是什么;在程序一中,你定义的result代表的是你要输入数据的个数所 ...
result = scanf_s("%d %f ", &i, &fp);
刚才我发现,把%f后面的空格删掉就对了,你试试吧
页:
[1]