C语言————BUG的常见情况(持续更新)

发布于:2025-07-26 ⋅ 阅读:(18) ⋅ 点赞:(0)

1.1 scanf函数的常见报错

小白一开始在进行编译时,执行很容易遇到如下报错:

warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

这个是典型的scanf函数应用的错误,编译器会将scanf视为不安全的函数,从而推荐我们使用scanf_s替换,但 scanf_s 他的使用和功能与scanf不尽相同。故而临时解决方法是在代码的第一行加入“#define _CRT_SECURE_NO_WARNINGS 1”

永久解决方法如下图

首先我们在everything(一个强大的索引软件,推荐下载)中搜索newc++,找到VS版本对应下的文件,并右键打开文件路径

最后在记事本中加入后面这段文字     #define _CRT_SECURE_NO_WARNINGS 1 ;

保存退出VS和记事本,再重新打开VS新建.c文件时就不会出现上述报错情况。

:我们也可以试试在其下方加入别的头文件引用,保存后,新建的源文件也会自动含有对应内容,这在一定程度上简化了我们的代码编写 

1.2 循环语句中的常见报错 

在编写有循环语句存在的代码程序时,我们是否会经常遇到以下情况

代码输入完成后,执行窗口一直闪烁不结算,这是最经典的一个问题,我们可以用如下案例来进行具体介绍:

观察下列代码,可以试着找一下是哪里出了问题

#include <stdio.h>

int main()
{
	int n = 0;//定义测试的数范围
	int m = 0;//定义需要记录的数字
	scanf("%d%d", &n,&m);
	int count = 0;//记录对应数字出现的次数
	for (int i = 1; i <= n; i++)
	{
		int b = 0;//记录i每位上的数字,用于比较
		do
		{
			b = i % 10;
			if (b == m)
				count++;
			i = i / 10;
		} while (i != 0);
	}
	printf("%d", count);
	return 0;
}

我们可以这么思考,报错中会提示算法复杂程度过大或者循环有错,结合执行窗口的信息来看,我们应该聚焦在代码中的循环语句上,最常见的问题就是循环无法结束

根据这个思路,我们假设循环语句的判断条件无法趋近(即 1. i 值永远<= n的值      2. i 永远!= 0);根据这两个假设,我们观察代码的逻辑,可以发现,在do while 循环语句中i的值最终会输出位0从而结束循环,导致for循环无法跳出,即第一种情况,这是没有增加中间变量导致的,也是最常见的一种代码情况,我们可以设置中间变量 j,用它来作为do while 循环的判断变量,具体修改如下:

int main()
{
	int n = 0;//定义测试的数范围
	int m = 0;//定义需要记录的数字
	scanf("%d%d", &n,&m);
	int count = 0;//记录对应数字出现的次数
	for (int i = 1; i <= n; i++)
	{
		int b = 0;//记录i每位上的数字,用于比较
		int j = i;//用来承载每个i的数值
		do
		{
			b =j % 10;
			if (b == m)
				count++;
			j = j / 10;
		} while (j != 0);
	}
	printf("%d", count);
	return 0;
}

循环语句错误的判断大部分是从判断条件为出发点。

恭喜你完成了本次的阅读,希望这篇文章能对你带来一点细微的帮助,同时有表述不当的地方也辛苦不吝赐教,三克油。

打怪升级中.........................................................................................................................................


网站公告

今日签到

点亮在社区的每一天
去签到