毛发怪 发表于 2023-8-11 09:37:23

为什么给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;
}

陶远航 发表于 2023-8-11 09:37:33

根据你提供的代码来看,cnt 是未定义的变量。在 C 语言中,变量需要先声明并赋予一个初始值,然后才能使用。

如果你取消注释 //cnt=0; 这一行代码,那么代码中就会引用到 cnt 变量,由于它没有被声明,编译器将会报错,导致程序无法运行。

如果你想要给 cnt 赋值为零,并在程序中使用它,你需要先将其声明,如下所示:

int cnt = 0;// 声明并初始化 cnt 变量为零


在你的代码中,由于 cnt 这个变量并没有在后续的循环或其他部分中使用,可以直接删除或注释掉这行代码。

希望以上解答能够帮助到你。如果你还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-8-11 09:37:35

问题出在变量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的初始值就是确定的,程序就可以正常运行了。

毛发怪 发表于 2023-8-11 09:40:55

isdkz 发表于 2023-8-11 09:37
问题出在变量d没有被初始化。在C语言中,未初始化的变量的值是不确定的,可能是任意值。因此,在while循环 ...

改了以后反倒是不行,没有给d赋初始值的情况下是可以运行的

毛发怪 发表于 2023-8-11 09:42:03

陶远航 发表于 2023-8-11 09:37
根据你提供的代码来看,cnt 是未定义的变量。在 C 语言中,变量需要先声明并赋予一个初始值,然后才能使用 ...

赋值以后不行,没有赋值的时候是可以运行的

isdkz 发表于 2023-8-11 09:43:18

毛发怪 发表于 2023-8-11 09:40
改了以后反倒是不行,没有给d赋初始值的情况下是可以运行的

你赋值得先声明,你的 cnt 只是赋值没有声明

毛发怪 发表于 2023-8-11 09:45:39

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赋值的情况下才能正常运行。

isdkz 发表于 2023-8-11 09:49:56

毛发怪 发表于 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。

毛发怪 发表于 2023-8-11 09:53:33

isdkz 发表于 2023-8-11 09:49
在C语言中,如果你没有给局部变量赋初始值,它的值是不确定的。在你的代码中,这个cnt变量并没有被赋 ...

我了解了,谢谢您的回复{:5_110:}

陶远航 发表于 2023-8-11 09:56:12

毛发怪 发表于 2023-8-11 09:53
我了解了,谢谢您的回复

解决了可以把最佳答案给他

歌者文明清理员 发表于 2023-8-11 09:58:46

陶远航 发表于 2023-8-11 09:56
解决了可以把最佳答案给他

{:10_249:}

陶远航 发表于 2023-8-11 09:59:17

歌者文明清理员 发表于 2023-8-11 09:58


歌者文明清理员 发表于 2023-8-11 10:00:06

陶远航 发表于 2023-8-11 09:59


抵制ChatGPT脚本回答

陶远航 发表于 2023-8-11 10:03:52

歌者文明清理员 发表于 2023-8-11 10:00
抵制ChatGPT脚本回答

他人工回答了
页: [1]
查看完整版本: 为什么给cnt赋值为零后就不能运行了。不赋值反倒是可以运行