在下面的程序中,我没有得到正确的答案。如果我输入"1“作为scanf的输入,结果-4200052将被打印出来。
下面是我的代码:
#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;
}我是不是遗漏了什么?有人能给我指点我做错了什么吗?
发布于 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.
发布于 2021-03-04 11:24:54
如果您不亲自初始化变量,在C中,它们将不会自动初始化(除非它们是static/global变量)。
当你这样做时会发生什么:
int a;
是sizeof(int)的内存地址块是为这个变量名保留的,但是分配的地址实际上没有写任何东西.这意味着,该内存地址中包含的任何内容都不会被“擦除”或给出任何值。
所以,很可能是,它已经在那个地址上写了一些东西,而您只是在读取一些垃圾值,它已经存储在那个内存地址中。
就像选择一张你需要的大小的纸,,你会从一堆剩下来的杂志和报纸上写一些的东西。也许你想在那张纸上做你的数学作业,但是如果你试着阅读上面写的东西,在它上写任何东西之前,你会发现什么都没有,只有过时的新闻!
用这段代码进行实验:
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上得到适当的值之后执行来修复程序,所以.
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;
}https://stackoverflow.com/questions/66469594
复制相似问题