为什么给cnt赋值为零后就不能运行了。不赋值反倒是可以运行
#include <stdio.h>int main(void)
{
int a,b,c;
int d;
printf("输入一个分数:");
scanf("%d/%d",&a,&b);
printf("0.");
//cnt=0;
while(a!=0 && d<200)
{
c=a*10/b;
a=a*10%b;
d++;
printf("%d",c);
if(d==200)
{
printf("\n");
}
}
return 0;
} 根据你提供的代码来看,cnt 是未定义的变量。在 C 语言中,变量需要先声明并赋予一个初始值,然后才能使用。
如果你取消注释 //cnt=0; 这一行代码,那么代码中就会引用到 cnt 变量,由于它没有被声明,编译器将会报错,导致程序无法运行。
如果你想要给 cnt 赋值为零,并在程序中使用它,你需要先将其声明,如下所示:
int cnt = 0;// 声明并初始化 cnt 变量为零
在你的代码中,由于 cnt 这个变量并没有在后续的循环或其他部分中使用,可以直接删除或注释掉这行代码。
希望以上解答能够帮助到你。如果你还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案 问题出在变量d没有被初始化。在C语言中,未初始化的变量的值是不确定的,可能是任意值。因此,在while循环中,条件"a!=0 && d<200"可能会导致未定义的行为。
当你注释掉"//cnt=0;"这行代码时,变量d的初始值是未定义的,但是由于未使用变量d,程序仍然可以正常运行。
当你取消注释"cnt=0;"这行代码时,变量d被赋值为0。在while循环中,条件"d<200"始终为假,因此循环不会执行,导致程序提前结束。
为了解决这个问题,你应该在声明变量d时将其初始化为0,即将"int d;"改为"int d = 0;"。这样,变量d的初始值就是确定的,程序就可以正常运行了。 isdkz 发表于 2023-8-11 09:37
问题出在变量d没有被初始化。在C语言中,未初始化的变量的值是不确定的,可能是任意值。因此,在while循环 ...
改了以后反倒是不行,没有给d赋初始值的情况下是可以运行的
陶远航 发表于 2023-8-11 09:37
根据你提供的代码来看,cnt 是未定义的变量。在 C 语言中,变量需要先声明并赋予一个初始值,然后才能使用 ...
赋值以后不行,没有赋值的时候是可以运行的 毛发怪 发表于 2023-8-11 09:40
改了以后反倒是不行,没有给d赋初始值的情况下是可以运行的
你赋值得先声明,你的 cnt 只是赋值没有声明 isdkz 发表于 2023-8-11 09:43
你赋值得先声明,你的 cnt 只是赋值没有声明
#include <stdio.h>
int main(void)
{
int a,b,c;
int cnt;
printf("输入一个分数:");
scanf("%d/%d",&a,&b);
printf("0.");
//cnt=0;
while(a!=0 && cnt<200)
{
c=a*10/b;
a=a*10%b;
cnt++;
printf("%d",c);
if(cnt==200)
{
printf("\n");
}
}
return 0;
}
我试了,还是在没有给cnt赋值的情况下才能正常运行。
毛发怪 发表于 2023-8-11 09:45
#include
int main(void)
{
在C语言中,如果你没有给局部变量赋初始值,它的值是不确定的。在你的代码中,这个cnt变量并没有被赋予初始值,其实是一种不良的编程习惯,因为它的值其实是不可预期的,这可能导致程序表现得不一致、难以调试。
但是在你的这个例子中,由于你在while判断条件中同时检查了a!=0 和cnt<200 ,足够保证了程序不会无限循环下去。也就是说,只要a不为0或者cnt到达200,循环就会停止。即使在cnt的值非常大甚至是负数的情况下,由于你是在每次循环中增加cnt的值,那么在有限的循环中它总会到达200,这也就隐式的变相保证了你的程序不会无限循环。
然而,你的这个代码在含有bug的,应该为cnt赋一个初始值0。因为在一些编译器或运行环境下,如果你不为cnt赋初始值,它将很可能是一个很大的值或者是负数,这将会使你的程序表现出不可预期的行为。在其他情况下,如果cnt的起始值太大,你的程序可能会打印出200个以上的数字,这并不是你想要的结果。因此,即使你的程序在某些情况下可以正常运行,但是这仍然是一个严重的编程错误,需要为cnt赋一个初始值0。 isdkz 发表于 2023-8-11 09:49
在C语言中,如果你没有给局部变量赋初始值,它的值是不确定的。在你的代码中,这个cnt变量并没有被赋 ...
我了解了,谢谢您的回复{:5_110:} 毛发怪 发表于 2023-8-11 09:53
我了解了,谢谢您的回复
解决了可以把最佳答案给他 陶远航 发表于 2023-8-11 09:56
解决了可以把最佳答案给他
{:10_249:} 歌者文明清理员 发表于 2023-8-11 09:58
? 陶远航 发表于 2023-8-11 09:59
?
抵制ChatGPT脚本回答 歌者文明清理员 发表于 2023-8-11 10:00
抵制ChatGPT脚本回答
他人工回答了
页:
[1]