星辰大海-H 2021-06-10 21:28 采纳率: 0%
浏览 14

发现一个C语言scanf输入的奇怪bug,这里为什么会这样?

  • 首先贴上源代码吧:
#include<iostream>
#include <cstdio>
#include <stdlib.h>
using namespace std;

class Good {
public:
	short int time;
	short int value;
	Good() {
		cin >> this->time >> this->value;    // 使用cin输入时正常
//		scanf("%d%d", &this->time, &this->value);    // 使用scanf输入时运行错误
		printf("测试点 1\n");
	}
};

int main() {
	int T, M;	// T表示总时间,M表示总数目
	scanf("%d%d", &T, &M);
	Good *goods = new Good[M];
    printf("测试点 2\n");
	
	int *dp = new int[T + 1];
	for(int i = 0; i <= T; i++) dp[i] = 0;
    printf("测试点 3\n");
	
	for(int i = 0; i < M; i++) {
		for(int j = T; j >= goods[i].time; j--) {
			if(dp[j] < dp[j - goods[i].time] + goods[i].value)
				dp[j] = dp[j - goods[i].time] + goods[i].value;
		}
	}
	printf("%d\n", dp[T]);
	
	return 0;
}
  • 然后是出现问题的测试数据:
300 10
95 89
75 59
23 19
73 43
50 100
22 72
6 44
57 16
89 7
98 64
  • 在这里我遇到了一个奇怪的问题,那就是在Good的构造函数中,我使用scanf进行数据输入时,就会出现程序崩溃(崩溃原因不唯一,有时候停止在测试点1,有时候则是测试点2或者测试点3),而用cin输入也是正常的,十分诡异:

 

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-06-10 21:33
    关注

    改成scanf("%hd%hd")试试

    评论

报告相同问题?

悬赏问题

  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤