【问题标题】:Codeforces compiler shows a different output than Code::Blocks (Question 282A - Bit++)Codeforces 编译器显示与 Code::Blocks 不同的输出(问题 282A - Bit++)
【发布时间】:2020-06-22 01:15:49
【问题描述】:

我一直在尝试 Codeforces 提交页面上可用的不同编译器,但没有一个不同的编译器提供像 Code::Block's 这样的输出

问题链接:https://codeforces.com/problemset/problem/282/A

这是我的代码:

#include <stdio.h>
#include <string.h>

int main() {
int count = 0, i = 0, final;
int x = 0;
char strg[3];

scanf("%d", &count);

for (i = 0; i < count; i++){
    scanf("%s", &strg[0], &strg[1], &strg[2]);
    if ((strcmp(strg,"x++") == 0) || (strcmp(strg,"++x") == 0)){
        x = x+1;
    } if ((strcmp(strg,"x--") == 0) || (strcmp(strg,"--x") == 0)){
        x = x-1;
    }
}
printf("%d", x);

}

提交页面输出:“错误答案第一个数字不同 - 预期:'1',找到:'0'” 但是,Code::Blocks 会打印正确的值,即“1”。

Codeforces 提交:

程序运行输出:

【问题讨论】:

  • C 字符串受最后一个字符串结尾字符 '\0' 的限制。但是由于您的变量只有 3 个字符的空间,因此使用的测试检查器可能会在第三个字符之后放置任何内容。 -- 另一个怪癖:为什么在调用scanf() 时只为一个格式说明符提供三个目标参数?此外,您应该检查它的返回值。
  • 我检查了返回值,它与 printf() 输出相同,请您进一步说明我应该做什么?
  • 嗯,printf() 的返回值和scanf() 的返回值有着完全不同的含义。请阅读其文档。 -- 另一件要考虑的事情:你确定“x”是小写的吗?
  • 您可能想打印读取指令以查看您得到了什么,例如:printf("\"%s\"\n", strg);
  • 我尝试使用您提到的语句打印读取行,它显示了输入的结果但它在引号之间,这有什么不同吗?输入时“x”为小写

标签: c int codeblocks


【解决方案1】:

strg[3] 太短,无法容纳 2 个字符的字符串。这是一种未定义的行为。

由于它是未定义的,它在某些环境中有效,而在另一个环境中无效。

【讨论】:

  • 我把 3 改成了 10 还是没区别。
猜你喜欢
  • 2020-05-17
  • 2016-07-28
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多