PAT乙级:1032 挖掘机技术哪家强

本文详细解析了C++编程中常见的三个错误:头文件使用不当、scanf函数警告及数组越界引发的段错误,并提供了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原始代码:

#include <cstdio>

const int maxn = 10005;
int school[maxn] = {0};

int main(){
	int n, schID, score;
	scanf("%d", &n);
	for(int i=1; i<=n; i++){
		scanf("%d %d", &schID, &score);
		school[schID] += score;
	}
	
	int k=1, MAX=-1;
	for(int i=1; i<=n; i++){
		if(school[i] > MAX){
			MAX = school[i];
			k = i;
		}
	}
	
	printf("%d %d", k, MAX);
	return 0;	
} 

因为用的是DEV C++,通过编译了之后就提交到了题库,没想到还是有错误,具体错误如下:

三个错误:

第一个:头文件错误

头文件开始用的是# include <cstdio>,在DEV C++里没有问题,但是在提交的时候没有通过,改成了# include <stdio.h>才通过。

第二个:warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result

这个是因为忽略了 scanf 函数的返回值才有的警告,代码没有错误处理,如果输入的数据格式不正确的话就会报错,解决方法是把 scanf 函数用 if 扩起来就好了。

解决方法:if(scanf("%d", &n)){};

第三个:段错误。

在提交了之后前几个测试点都正确,但是在第三个测试点的时候报了段错误,这是因为数组不够大导致的,注意是10的5次方,笔者在这里开了10005的数组,少了一位,所以会报段错误。

解决方法:注意题目要求,数组大小要准确,开到100005.

改正之后:

#include <stdio.h>

int school[100005] = {0};

int main(){
	int n, schID, score;
	if(scanf("%d", &n)){}
	for(int i=1; i<=n; i++){
		if(scanf("%d %d", &schID, &score));
		school[schID] += score;
	}
	
	int k=1, MAX=-1;
	for(int i=1; i<=n; i++){
		if(school[i] > MAX){
			MAX = school[i];
			k = i;
		}
	}
	
	printf("%d %d\n", k, MAX);
	return 0;	
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值