关于scanf()函数的问题,请各位高手解答... ... (注:该问题非专业人士不可答)

[复制链接]
查看11 | 回复2 | 2011-7-7 07:39:15 | 显示全部楼层 |阅读模式
#include\"stdio.h\"
input(b)
intb;
{printf(\"\\n\\n请输入b的值\");
scanf(\"%d\",
fflush(stdin);
if(b!=2||b!=3)printf(\"ERROR!应输入2/3!\\n\\n\");
elseprintf(\"b=%d\\n\\n\",b);
}

main()
{inta,b;
a=1;
while(a!=0)
{printf(\"请输入a的值(0=COTINUE):\");
scanf(\"%d\",printf(\"a=%d\",a);
fflush(stdin);
if(a05)
input(b);/*调用输入函数*/
elseif(a==0)break;
else{printf(\"ERROR!应输入1-5之间的整数!\\n\\n\");}
}printf(\"\\n\\na=%d,b=%d\",a,b);
}

这些代码怎么和我想的运行方式(WIN-TC)一点都不相同,且结果与输入的数字也不相同;还请各位老大们教教我,谢谢!
回复

使用道具 举报

千问 | 2011-7-7 07:39:15 | 显示全部楼层
第一,scanf(\"%d\",这里有可能获取输入数字失败,如果你输入一个非数字,比如a那就输入失败,这个时候a的值不确定。
第二,input(b);这个函数是值调用,不是地址调用,所以在函数里面获取的b值在main函数里根本不可能获取到。所以在main函数里b也是一个随机数









<h4class=\"ask\">追问


如果要实现这种算法即:当输入的a=0时结束;当输入的a值满足a05时调用输入函数input();当输入其他数字或字符时输出‘ERROR!应输入1-5之间的整数!’,再返回重新输入a的值。

采用地址调用时程序具体该怎么做?不采用时又该怎么做?你说的‘在函数里面获取的b值因在main函数里不可获取,从而在main函数里b也是一个随机数’,为什么输入的任意字符、数字最后输出(printf(\"\\n\\na=%d,b=%d\",a,b);)的结果总是a=0;b=852?
回复

使用道具 举报

千问 | 2011-7-7 07:39:15 | 显示全部楼层
随机数是指不确定的一个数字,不代表每次运行都会不一样。这个和编译器有关。理论上每次编译运行的b的结果都不一样。
采用地址调用的时候是用的指针来改变b的值,因为地址传递给了子函数,函数是可以更改这个地址里的值的。但是如果你用的是值传递函数的话,程序会复制一个副本给子函数,也就是说子函数不管怎么改变b,在父函数里都是捕捉不到的

建议你还是好好学习一下C语言的基本知识
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行