提问人:Andreas 提问时间:10/21/2023 更新时间:10/21/2023 访问量:74
谁能告诉我为什么 C 中的这段代码不能正常工作?
Could anyone tell me why this code in C is not working how it should?
问:
我的目标是显示两个循环传递的次数之和。
有谁知道我做错了什么?
#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 个。
答:
4赞
ShadowRanger
10/21/2023
#1
两个问题:
你在循环的关闭括号后面放一个分号,这样它下面的块(确实)根本没有连接到循环,它只是一个随机的子块,执行一次并退出。删除右括号后面的分号,它将执行您期望的操作。
for
a++;
for
n
是一个 ,它不能取带有小数点的值。当赋值回 时,每个都会被截断回,因此它最终等效于每次,并且循环仅运行 917 次。更改 的声明,使其成为 ,而不是 ,它将执行您期望的操作。int
- 0.5
int
n
- 1
n
double
int
评论
0赞
0___________
10/21/2023
printf("%.2lf " , a );
错误的 printf 格式
0赞
ShadowRanger
10/21/2023
@0___________:是一个(出于某种原因),所以可以正常工作。lf
和 f
对 printf
的工作方式相同,因此是多余的,但无害。精度是没有意义的(它只以整数单位进行操作,所以显示任何小数位都是愚蠢的),但它是功能性的,只是很奇怪。a
double
%.2lf
l
2赞
ShadowRanger
10/21/2023
@0___________:这不是一个“对我有用”的场景,你对一个非常错误的人是相当侮辱的。你在想(大写 L),这确实意味着 . 并且对 C99 的意思相同。 当传递给 varargs 函数时,会提升为 ,例如 ,不可能有一个有用的格式代码来区分两者(区别只对 有关系,它接收指向特定类型的指针并可以进行区分)。%Lf
long double
%lf
%f
printf
float
double
printf
printf
scanf
0赞
0___________
10/21/2023
不好意思。。。。。。。。。
评论
for (int zaehler = 0; zaehler != 10; zaehler = zaehler +1);
为什么是分号?这个循环(它是一个完整的循环)除了设置 .以下块的执行方式就好像它是单个语句一样:它是一个“免费”块(属于 alone)。zaehler
{ a++; }
main()
n = n - 0.5
n
int
917 - 0.5
916.5
int
916
1
915.5
915
914.5
914