【发布时间】: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