c语言说非法用void,关于C语言得非法输入

关于C语言得非法输入

首先我们来看看什么是非法输入

# include

int main(void)

{

int i,j,k;

char ch;

printf("请进行第一次输入...\n");

scanf("%d",&i);

printf("i=%d\n",i);

printf("----------------\n");

printf("请进行第二次输入....\n");

scanf("%d",&j);

printf("j=%d\n",j);

printf("----------------\n");

printf("请进行第三次输入....\n");

scanf("%d",&k);

printf("k=%d\n",k);

return 0;

/*

----------------vc++6.0中输出得结果-----------------------

请进行第一次输入...

123

i=123

----------------

请进行第二次输入....

456

j=456

----------------

请进行第三次输入....

789

k=789

-------------------------------------------------------------

请进行第一次输入...

123.。。。。

i=123

----------------

请进行第二次输入....

j=-858993460

----------------

请进行第三次输入....

k=-858993460

-------------------------------------------------------------

请进行第一次输入...

mmmmm

i=-858993460

----------------

请进行第二次输入....

j=-858993460

----------------

请进行第三次输入....

k=-858993460

-----------------------------------------------------------

心得:

我们看到只有第一次的输入是正确的。我们先来说说为什么要使用输出控制符。

我们从终端中输入的都是字符或者字符串,例如我们输入123,在我们看来是数字,但是在计算机看来就是字符,我们在python中也是的,使用的时候需要将字符转换成为相应的数据类型。

所以我们就是需要使用输出控制符将字符转化成为我们需要的数据类型进行输入。搞懂了为什么要使用输出控制符,我们再来回答上面的问题。

scanf函数在进行输入的时候,先对字符串进行读取,例如"123mmmm",读取的123符合%d的输入形式,所以就赋值给了i。但是后面的mmmm不符合%d的输入形式,继续的留在输入的字符串中,等待

下一次的读取。结果在下面使用scanf函数的时候,率先从上面没有读完的地方继续进行读写,mmmm显然不符合%d所以初始化变量j失败,系统自动为变量j赋值为垃圾值。这就是为什么出现上面现象

的原因。如果输出控制符改为%c那就一点问题都没有了,因为mmmm是满足这个控制符的。

----------------------------------------------------------

*/

}

我们看到用户的非法输入给后面造成了严重的影响

控制非法输入

# include

int main(void)

{

int i,j,k;

char ch;

printf("请进行第一次输入...\n");

scanf("%d",&i);

printf("i=%d\n",i);

while(ch=getchar()!='\n')

continue;

printf("----------------\n");

printf("请进行第二次输入....\n");

scanf("%d",&j);

printf("j=%d\n",j);

while(ch=getchar()!='\n')

continue;

printf("----------------\n");

printf("请进行第三次输入....\n");

scanf("%d",&k);

printf("k=%d\n",k);

return 0;

/*

----------------vc++6.0中输出得结果-----------------------

请进行第一次输入...

23mmmmm

i=23

----------------

请进行第二次输入....

45mmmmmmmmmm

j=45

----------------

请进行第三次输入....

78mmmmmmmmmmm

k=78

-----------------------------------------------------------

心得:

我们看到加入一个while循环后就解决了这个问题。实际上也是比较好理解的就不细讲了。

*/

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值