谁能告诉我为什么 C 中的这段代码不能正常工作?

Could anyone tell me why this code in C is not working how it should?

提问人:Andreas 提问时间:10/21/2023 更新时间:10/21/2023 访问量:74

问:

我的目标是显示两个循环传递的次数之和。

有谁知道我做错了什么?

#include<stdio.h>

void main(void)
{
    double a;
    a = 0;
    //(a)
    int zaehler;
    for (int zaehler = 0; zaehler != 10; zaehler = zaehler +1);
    {
        a++;
    }
    //(b)
    int n;
    for (n = 917; n > 0; n = n - 0.5)
    {
            a++;
    }


    printf("%.2lf " , a );

}

第一个 for 循环只有一次传递,第二个只有 917 个传递。虽然第一个 shouls 有 10 个,第二个有 1834 个。

C 循环

评论

3赞 pmg 10/21/2023
for (int zaehler = 0; zaehler != 10; zaehler = zaehler +1);为什么是分号?这个循环(它是一个完整的循环)除了设置 .以下块的执行方式就好像它是单个语句一样:它是一个“免费”块(属于 alone)。zaehler{ a++; }main()
3赞 wohlstad 10/21/2023
也没有做你想做的事,因为是一个.n = n - 0.5nint
2赞 pmg 10/21/2023
建议:打开编译器发出的所有警告。阅读并理解这些警告。最终编写没有警告的代码:)
1赞 pmg 10/21/2023
顺便说一句:第二个循环“有效”,因为它被转换为的值,以此类推,每次递减(转换为,转换为,...)。917 - 0.5916.5int9161915.5915914.5914

答:

4赞 ShadowRanger 10/21/2023 #1

两个问题:

  1. 你在循环的关闭括号后面放一个分号,这样它下面的块(确实)根本没有连接到循环,它只是一个随机的子块,执行一次并退出。删除右括号后面的分号,它将执行您期望的操作。fora++;for

  2. n是一个 ,它不能取带有小数点的值。当赋值回 时,每个都会被截断回,因此它最终等效于每次,并且循环仅运行 917 次。更改 的声明,使其成为 ,而不是 ,它将执行您期望的操作。int- 0.5intn- 1ndoubleint

评论

0赞 0___________ 10/21/2023
printf("%.2lf " , a );错误的 printf 格式
0赞 ShadowRanger 10/21/2023
@0___________:是一个(出于某种原因),所以可以正常工作。lffprintf 的工作方式相同,因此是多余的,但无害。精度是没有意义的(它只以整数单位进行操作,所以显示任何小数位都是愚蠢的),但它是功能性的,只是很奇怪。adouble%.2lfl
2赞 ShadowRanger 10/21/2023
@0___________:这不是一个“对我有用”的场景,你对一个非常错误的人是相当侮辱的。你在想(大写 L),这确实意味着 . 并且对 C99 的意思相同。 当传递给 varargs 函数时,会提升为 ,例如 ,不可能有一个有用的格式代码来区分两者(区别只对 有关系,它接收指向特定类型的指针并可以进行区分)。%Lflong double%lf%fprintffloatdoubleprintfprintfscanf
0赞 0___________ 10/21/2023
不好意思。。。。。。。。。