多个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使用造成的非法输入的主要内容,如果未能解决你的问题,请参考以下文章

ASCII码排序(hdu2000)

An easy problem(hdu2055)

vs2019 c语言 字符串用法?

关于while(scanf_s("%d",&x)!=0) 的逻辑错误 (scanf_s的 返回值)

oracle ORA-01840:输入值对于日期格式不够长,请高手帮忙。有非法数据?怎么处理?

为什么 scanf( )(scanf_s)函数老要输入两次才行?