多个scanf_s使用造成的非法输入
Posted 軒邈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个scanf_s使用造成的非法输入相关的知识,希望对你有一定的参考价值。
/*
2022.03.10
目的:
检测当使用多个scanf时候,怎么去防止非法输入情况的发生
*/
#include <stdio.h>
#if 0
int main(void)
int i;
int j;
scanf_s("%d", &i);
printf("i = %d\\n", i);
scanf_s("%d", &j);
printf("j = %d\\n", j);
return 0;
#endif
/*
上述程序运行结果:
123m
i = 123
j = -858993460
*/
#if 1
int main(void)
int i;
int j;
scanf_s("%d", &i);
printf("i = %d\\n", i);
while ((getchar() != '\\n'))
continue;
scanf_s("%d", &j);
printf("j = %d\\n", j);
return 0;
#endif
/*
上述程序运行结果:
123m
i = 123
123
j = 123
*/
/*
解释:
第一个程序中没有加while这个循环代码,那么当产生非法输入“123m”时,第一个scanf键盘输入到m之前自动结束,所以到第二个
scanf的时候,sanf默认输入的m,那么产生了非法输入,则会出现第一个程序运行后的结果,那么解决办法在后面的程序中,加上一个
while循环
*/
以上是关于多个scanf_s使用造成的非法输入的主要内容,如果未能解决你的问题,请参考以下文章
关于while(scanf_s("%d",&x)!=0) 的逻辑错误 (scanf_s的 返回值)