【问题标题】:Format specifiers not working, giving RUNTIME ERROR格式说明符不起作用,给出 RUNTIME ERROR
【发布时间】:2017-03-02 19:28:26
【问题描述】:
#include<stdlib.h>
#include<stdio.h>
int main()
{
    int a,b;
    printf("Enter two numbers : ");
    scanf("%d %d",a,b);
    printf("%d %d",a,b);
    return 0;
}

为什么这段代码用 C 编写并保存为 New.c,在 Dev C++ 和 Turbo C++ 编译器中都会出现运行时错误? 在执行第一个 printf 之后,它需要值,然后屏幕突然关闭。请帮我。我是 C 的新手。

【问题讨论】:

  • 请阅读scanf 的手册页。应该是scanf("%d %d", &amp;a, &amp;b);,请同时启用所有编译器警告。
  • 当然,如果您使用的是 Turbo C++,则不存在那些编译器警告。 :( 请使用现代编译器,而不是 25 岁左右的编译器。

标签: c dev-c++ turbo-c++


【解决方案1】:
#include<stdlib.h>
#include<stdio.h>
int main()
{
    int a,b;
    printf("Enter two numbers : ");
    scanf("%d %d", &a, &b);
    printf("%d %d",a,b);
    return 0;
}

在扫描任何原始数据类型之前,您需要使用“&”。

当您编译时,您将直接提供 a 和 b 的值,就好像它们是内存位置一样,并且您的程序试图将这些值作为地址来存储扫描的值。

这允许您将文字地址存储在整数中,并且可以正常工作。但是,对于您要执行的操作,您需要提供 a 和 b 的地址。

“&”允许您将变量的地址(通过引用传递)传递给函数,因此您可以在正常范围之外编辑内容。

tldr;使用“&”扫描基本数据类型(short、int、long、char、float、double)。不要使用 '&' 将它们打印出来。

【讨论】:

  • 感谢您的帮助。我从昨天开始学习C。我在 C++ 和 JAVA 方面有很强的基础。该解决方案确实有效。再次感谢。
猜你喜欢
  • 2021-02-24
  • 2021-11-22
  • 1970-01-01
  • 2016-02-13
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多