首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的C程序打印垃圾值?

为什么我的C程序打印垃圾值?
EN

Stack Overflow用户
提问于 2021-03-04 06:18:08
回答 2查看 80关注 0票数 0

在下面的程序中,我没有得到正确的答案。如果我输入"1“作为scanf的输入,结果-4200052将被打印出来。

下面是我的代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main() {

int n;
int a = -n-4;
int square = n*n;
int b = square-7;

printf("ENTER AN INTEGER: ");
scanf ("%d" , &n);

if (n<3)
printf ("%d" , a);

else
{
   if (n >= 3 || n <= 10)
   printf ("%d" , b);
}

return 0;
}

我是不是遗漏了什么?有人能给我指点我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-04 06:26:20

这是因为在初始化时,您正在执行一个操作,但是"n“没有值。您必须将操作"a=-n-4“放在printf函数之前(当变量"n”具有已知值时)。这可能解决了您的问题,因为在开始时,变量"n“没有值(垃圾值),所以"a”没有值(垃圾值)。正如我所说的,尝试将数学运算放在scanf函数之后,并告诉我它是否有效。

另一方面,你的“其他”的连词:

if (n >= 3\n <= 10)

"n<=10“的条件没有意义,因为所有低于10的值都大于3。

BR.

票数 1
EN

Stack Overflow用户

发布于 2021-03-04 11:24:54

如果您不亲自初始化变量,在C中,它们将不会自动初始化(除非它们是static/global变量)。

当你这样做时会发生什么:

int a

sizeof(int)的内存地址块是为这个变量名保留的,但是分配的地址实际上没有写任何东西.这意味着,该内存地址中包含的任何内容都不会被“擦除”或给出任何值。

所以,很可能是,它已经在那个地址上写了一些东西,而您只是在读取一些垃圾值,它已经存储在那个内存地址中。

就像选择一张你需要的大小的纸,,你会从一堆剩下来的杂志和报纸上写一些的东西。也许你想在那张纸上做你的数学作业,但是如果你试着阅读上面写的东西,在它上写任何东西之前,你会发现什么都没有,只有过时的新闻!

用这段代码进行实验:

代码语言:javascript
复制
int main()
{

   int n;

   printf("Non-initialised n value: %d\n", n);

   int a = n + 1;

   printf("Value of n incremented by one: %d\n", a);

   n = 4;

   printf("Value of initialised n:\n", n);
   
   return 0;

}

现在更清楚了吗?你正在阅读n的价值,这是一个垃圾价值(过时的足球比赛结果,也许?)你实际上是在垃圾值上做一些事情,用:int a = -n-4;

因此,现在您已经知道了这一点,您也知道可以通过确保在n上的所有操作都在n上得到适当的值之后执行来修复程序,所以.

代码语言:javascript
复制
int main()
{

   int n;

   printf("ENTER AN INTEGER: ");
   scanf("%d", &n);

   int a = -n - 4;
   int square = n * n;
   int b = square - 7;

   if (n < 3)
      printf("%d", a);

   else
   {
      if (n >= 3 || n <= 10)
         printf("%d", b);
   }
   return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66469594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档