【问题标题】:Garbage value in c [closed]c中的垃圾值[关闭]
【发布时间】:2012-05-11 05:35:01
【问题描述】:

我的代码是

#include<stdio.h>
#include<conio.h>
main()
{
    int p;
    scanf("%d",p);
    printf(p*10);
}

但是它给出了垃圾值,为什么?

【问题讨论】:

  • 您是否启用了编译器给出的所有警告?您是否使用调试器来调试您的程序?

标签: c


【解决方案1】:

您需要在scanf 调用中使用&amp;p。您还需要在printf() 调用中使用格式字符串。

以下是您的代码存在的主要问题的列表:

  • scanf("%d", p) - 您需要将指针传递给 int,而不是 int。现在,您正在写入未初始化的 int 变量包含的任何地址/值。
  • printf(p*10) - 您需要传递格式字符串作为第一个参数,并根据格式字符串传递值作为以下参数。在您的情况下,"%d" 打印一个整数,然后将p(或p*10)作为第二个参数。

这里是固定代码:

int main()
{
    int p;
    scanf("%d", &p);
    printf("%d\n", p*10);
}

【讨论】:

  • printf 命令中的 %d 怎么样
【解决方案2】:

您只需打印此未初始化变量的值。

scanf 需要一个指针来写入答案。你提供一个看起来像内存地址的整数。尝试用 -Wall 编译例如

【讨论】:

    【解决方案3】:
    scanf("%d",p);
    printf(p*10);
    

    令我惊讶的是,这确实有效!尤其是printf 命令。

    您需要阅读 C 语言中的 Format Specifiersprintfscanf 命令。:)

    【讨论】:

    • 这是您分享答案的地方,而不是您的惊喜。
    【解决方案4】:

    scanf 中使用reference operator(&amp;),在printf 中使用format specifier

    如果您不在scanf 中使用'&amp;' 运算符,您总是会得到garbage 值,因为输入的值不会存储在variablememory location 中。它不知道存储在哪里..

    它会扫描您的值,但不会存储在变量中。获取垃圾值的原因是您使用了local 变量,它的内存位置是STACK

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 2013-04-20
      • 2010-09-10
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多