gpt4 book ai didi

c - 代码中的运行时错误

转载 作者:行者123 更新时间:2023-11-30 20:34:47 26 4
gpt4 key购买 nike

问题:在标准输入流上,我们从音叉 [0, 31] 获得数字集序列。每组均以-1结束。每个集合可能是空的,并且集合中的数字可能重复。您需要对所有集合进行异或并输出结果的十六进制表示,即我们得到 {1, 2, 3}, {3, 4}, {1, 5},结果为 {2, 4, 5},因此十六进制表示为 34。结果集中的每个数字对应于 32 位十六进制表示中的位。

#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>

int main() {
int32_t currentNum;
uint32_t num = 0, result = 0;

while (scanf("%"SCNd32, &currentNum) == 1) {
if (currentNum != -1) {
num |= 1 << currentNum;
} else {
result ^= num;
num = 0;
}
}
printf("%x\n", result);
return 0;
}

这个问题很简单,我的解决方案就是上面的。但我有以下问题:我发送代码的测试系统返回运行时错误。我无法想象错误在哪里,也无法提出返回运行时错误的此类测试。你能给我一些建议吗?

最佳答案

首先,看起来 1 << 31 是未定义的行为。请注意, 1signed constant ,并且 1 << 31 不能用 int 表示,因此 undefined 。在那里尝试 1U << currentNum 使其未签名且定义良好。

其次,SCNd32 可能不是您所期望的。在我的系统(Windows 上的 MinGW-w64 GCC 5.3.0)上,它根本没有定义,所以你的程序无法编译。因此我可以想象它也可以被定义为其他含义,然后编译但在运行时失败。在那里尝试一个简单的 "%d""%i"

第三,一些在线判断器可能被配置为通过在运行时调用某些函数后终止来限制调用某些函数。例如,如果法官管理员认为出于某种奇怪的原因您应该使用 scanf,则此类函数之一可能是 fgets;如果语言实际上是 C++,则可能是 iostream。然而,这已经是猜测领域了。尝试阅读法官文档,看看情况是否如此。

关于c - 代码中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com