我有这个代码,问题是无论我给“m”什么值,while while while循环,我不知道为什么
这是代码
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main(void){
float ur, N, h1, h2, h3, l1, l2, l3, uo, w, V, i, lc1, lc2, A1, A2, A3, A4, R1, R2, R3, R4, Req, fl, P;
int m;
uo = 4*M_PI*(pow(10, -7));
printf("\n-- Inicio del Problema --");
printf("\n-- Para conocer las variables revise la imagen en la parte trasera de la portada del disco --");
while (m != 1){
printf("\n-- Introduzca Permeabilidad magnetica relativa\t");
scanf("%f", &ur);
printf("\n-- Introduzca voltaje en volts\t");
scanf("%f", &V);
printf("\n-- Introduzca corriente en amperes\t");
scanf("%f", &i);
printf("\n-- Introduzca el número de espiras\t");
scanf("%f", &N);
printf("\n-- Introduzca las alturas en metros (h1, h2 y h3 separados por espacio)\t");
scanf("%f %f %f", &h1, &h2, &h3);
printf("\n-- Introduzca los largos en metros (l1, l2, y l3 separados por espacio)\t");
scanf("%f %f %f", &l1, &l2, &l3);
printf("\n-- Introduzca la anchura en metros (w)\t");
scanf("%f", &w);
printf("\nur = %f \t V = %f V \t I = %f A \t N = %f espiras \nh1 = %f m \t h2 = %f m \t h3 = %f m \nl1 = %f m \t l2 = %f m \t l3 = %f m \t w = %f m", ur, V, i, N, h1, h2, h3, l1, l2, l3, w);
printf("\nHa introducido correctamente los datos (si = 1, no = 2)? \t");
scanf("%d", m);
}
lc1 = l2+(l1/2)+(l3/2);
lc2 = h2+(h1/2)+(h3/2);
A1 = h1*w;
A2 = l3*w;
A3 = h3*w;
A4 = l1*w;
R1 = lc1/(ur*uo*A1);
R2 = lc2/(ur*uo*A2);
R3 = lc1/(ur*uo*A3);
R4 = lc2/(ur*uo*A4);
Req = R1+R2+R3+R4;
fl = (N*i)/Req;
P = V*i;
printf("\n-- Las áreas son: \nA1 = %f m^2 \nA2 = %f m^2 \nA3 = %f m^2 \nA4 = %f m^2", A1, A2, A3, A4);
printf("\n-- Las reluctancias son: \nR1 = %f A*V/wb \nR2 = %f A*V/wb \nR3 = %f A*V/wb \nR4 = %f A*V/wb", R1, R2, R3, R4);
printf("\n-- La reluctancia equivalente es: \nReq = %f A*V/wb", Req);
printf("\n-- El flujo magnetomotriz es: \nF = %f wb", fl);
printf("\n-- La potencia del sistema es: \nP = %f watts", P);
getch();
return 0;
}
我尝试过改为“m == 2”,做了一段时间。无论我做什么,要么打破任何答案,要么没有任何答案。
我也尝试在循环中放入if / break,无论是while还是do-while,但仍然存在同样的问题
如果你指出我的问题,我真的很感激
答案 0 :(得分:5)
变化:
scanf("%d", m);
为:
scanf("%d", &m);
就是这样,m
没有改变(它写入了内存中某些不安全的地址)。
您的编译器应该对此发出警告,因此请确保已启用编译器警告。
此外,您需要将初始值分配给m
,可能为零,以强制第一次输入循环。
答案 1 :(得分:4)
请尝试以下更正:
1)初始化m
(如果你想要执行while循环,则为不同于1的东西)。
2)将scanf("%d", m);
更改为scanf("%d", &m);
,以便读入您在条件中使用的相同变量。
答案 2 :(得分:4)
那里有两个问题:
m
未初始化。 scanf("%d", m);
应为scanf("%d", &m);
。请注意&
之前的m
。 他们中的任何一个都会导致未定义的行为。但是,循环无限的可能原因是scanf("%d", m);
将输入存储到地址m
而不是m
的地址。因此,m
可能具有不确定的值,该值可能不等于1
并导致表达式m != 1
始终为true
。
建议阅读:What will happen if '&' is not put in a 'scanf' statement in C?。
答案 3 :(得分:3)
我认为这一行存在问题
scanf("%d", m);
这将把值设置为地址,其值为m而不是设置为m。
正确应该是
scanf("%d", &m);