【问题标题】:Why my C program is giving wrong output but the code is right?为什么我的 C 程序输出错误但代码是正确的?
【发布时间】:2020-06-17 13:50:09
【问题描述】:

我在 CLion 上写了一个测试代码。代码是:

#include <stdio.h>

int main() {
    int a, b, sum;
    printf("Enter an integer: ");
    scanf("%d", &a);
    printf("Enter another integer: ");
    scanf("%d", &b);
    sum = a + b;
    printf("Sum: %d\n", sum);
    return 0;
}

代码的输出不像它应该的那样。代码的输出是:

Enter an integer:23
 Enter another integer:12
 Sum: 35

输出问题: 1. 在第一行中,(:) 后面会有一个空格 2. int第二行,它在一个空格之后开始,并且在(:)之后也没有空格 3. 第三行也是以空格开头。

还有一个问题。它显示了scanf 的警告。此处给出警告消息图像:

建议我使用strtol 而不是scanf。但是当我使用strtol 时,它会显示错误。 我正在使用 mingw。 它的解决方案是什么?请帮帮我。

【问题讨论】:

  • 您的代码在我看来是正确的。
  • 输出问题属于某些IDE的缓冲,和你的代码无关,没关系。 Eclipse 有一个非常相似且著名的问题,here
  • 请将scanf()/strtol 问题打包成另一个单独的问题。我们需要查看实际代码以了解 CLion 为何建议 strtol 以及如果您将其与如何使用 strtol 的示例一起使用,您的代码为何会失败。
  • 你不能直接用 strtol() 替换 scanf()。 fgets() 然后 strtol() 是可取的。但是,对于像这样的简单练习,可以忽略警告。
  • 如果在每个 printf 语句之后立即放置 fflush(stdout); 会发生什么?

标签: c ide clion


【解决方案1】:

请刷新stdout

#include <stdio.h>
int main() {
    int a, b, sum;
    printf("Enter an integer: ");
    fflush(stdout); // here
    scanf("%d", &a);
    printf("Enter another integer: ");
    fflush(stdout); // and here
    scanf("%d", &b);
    sum = a + b;
    printf("Sum: %d\n", sum);
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多