【发布时间】:2012-05-11 05:35:01
【问题描述】:
我的代码是
#include<stdio.h>
#include<conio.h>
main()
{
int p;
scanf("%d",p);
printf(p*10);
}
但是它给出了垃圾值,为什么?
【问题讨论】:
-
您是否启用了编译器给出的所有警告?您是否使用调试器来调试您的程序?
标签: c
我的代码是
#include<stdio.h>
#include<conio.h>
main()
{
int p;
scanf("%d",p);
printf(p*10);
}
但是它给出了垃圾值,为什么?
【问题讨论】:
标签: c
您需要在scanf 调用中使用&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);
}
【讨论】:
您只需打印此未初始化变量的值。
scanf 需要一个指针来写入答案。你提供一个看起来像内存地址的整数。尝试用 -Wall 编译例如
【讨论】:
scanf("%d",p);
printf(p*10);
令我惊讶的是,这确实有效!尤其是printf 命令。
您需要阅读 C 语言中的 Format Specifiers 和 printf 和 scanf 命令。:)
【讨论】:
在scanf 中使用reference operator(&),在printf 中使用format specifier。
如果您不在scanf 中使用'&' 运算符,您总是会得到garbage 值,因为输入的值不会存储在variable 的memory location 中。它不知道存储在哪里..
它会扫描您的值,但不会存储在变量中。获取垃圾值的原因是您使用了local 变量,它的内存位置是STACK。
【讨论】: