【问题标题】:Program crashes when trying to read numbers with scanf尝试使用 scanf 读取数字时程序崩溃
【发布时间】:2014-06-24 08:51:29
【问题描述】:

当我运行此代码时,会出现这样的消息。 Project.exe 已停止工作

我的一些其他代码有效,但这似乎给我一个错误。

#include<stdio.h>
#include<conio.h>

void main()
{
    int n1, n2, sum;

    puts("first number");
    scanf("%d", n1);
    fflush(stdin);
    puts("second number");
    scanf("%d", n2);
    sum = n1 + n2;

    printf("%d + %d = %d", n1, n2, sum);

    getch();

}

我基本上想添加两个数字。

【问题讨论】:

  • 请阅读编译器的警告并修复它指出的错误,然后再询问此处。
  • 哇,我不敢问你写的程序有什么秘密名字D:
  • 有趣的是,我的编译器没有给我警告。 @Mat
  • 那么你没有传递正确的标志。 -Wall -Wextra -Werror 应该是您开始时的最小设置。
  • @Mat 我认为他没有使用 gcc,所以警告选项可能不同。项目文件很可能来自 Visual Studio

标签: c dev-c++


【解决方案1】:

scanf 获取存储输入值的变量的地址。您需要将 scanf 调用更改为

scanf("%d", &n1);
scanf("%d", &n2);
//          ^ note the & operator

另外,请注意,在输入流上调用 fflush 是未定义的行为。所以,fflush(stdin) 是不正确的。您需要手动读取并丢弃 stdin 流中剩余的无关输入。

【讨论】:

  • 感谢您为您的代码 sn-p 添加解释。我害怕你会像rev1一样离开它:)
  • 未定义行为是什么意思?我是新手@ajay
  • @user3328692 未定义的行为意味着代码是错误的,即使它可以正常编译。代码的结果是不可预测的,任何事情都可能发生。它可能看起来工作正常,但并不可靠。下次运行它可能会崩溃。请在此处阅读更多信息 - en.wikipedia.org/wiki/Undefined_behavior
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2021-08-27
相关资源
最近更新 更多