C 以非零状态退出
我是编程新手,尝试自己学习,我的代码中有一个错误,我不明白这是语法错误,或者我做错了smth。我使用了3个方程和它的条件,并将其用于iscontraction,while,do-while,if-else,with-switch。在引入变量a后,它向我显示了一个错误“以非零状态退出”C 以非零状态退出,c,C,我是编程新手,尝试自己学习,我的代码中有一个错误,我不明白这是语法错误,或者我做错了smth。我使用了3个方程和它的条件,并将其用于iscontraction,while,do-while,if-else,with-switch。在引入变量a后,它向我显示了一个错误“以非零状态退出” #包括 #包括 int main(){ 浮球a,x,b; 浮子L; int m; printf(“输入变量a、x、b:”); 扫描(“%f%f%f,&a,&x,&b”); printf(“用于指令(输入1)”; p
#包括
#包括
int main(){
浮球a,x,b;
浮子L;
int m;
printf(“输入变量a、x、b:”);
扫描(“%f%f%f,&a,&x,&b”);
printf(“用于指令(输入1)”;
printf(“用于使用while指令(输入2)”;
printf(“用于使用do while指令(输入3)”;
printf(“用于使用ef指令(输入4)”;
scanf(“%d,&m”);
开关(m){
案例1:
对于(x=0;x=1.2&&x3.9;x++)
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
打破
案例2:
而(x=1.2&&x3.9)
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
打破
案例3:
做
{
L=2*cos(x-(3.14/6));
}
而(x=1.2&&x3.9);
打破
案例4:
如果(x=1.2&&x3.9)
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
其他的
{
printf(“第三项声明为虚假”);
}
打破
违约:
printf(“\n没有正确的选择\n”);
}
printf(“您的答案是:L=%.3f,L”);
}
您缺少返回0;主函数末尾的语句。由于c main函数是intmain()您的问题是scanf
参数的格式不正确
而不是scanf(“%f%f%f,&a,&x,&b”)代码>使用scanf(“%f%f%f”、&a、&x和&b)代码>。在第二个scanf
中相同
变量地址是参数,不是字符串的一部分
调用它时,scanf
会找到第一个%f
,但它没有任何可将值放入的地址。或者更准确地说,它会从垃圾中找到它需要的值(读取堆栈和参数的动态数量),因为您没有插入它。scanf(“%f%f%f,&a,&x,&b”)
;应该是这样的scanf(“%f%f%f”,&a,&x,&b)代码>。请更正您使用scanf的位置。由于语法错误,您的代码没有从用户处获取输入。我已经编译并试过了,它运行正常。请随时随地更改scanf语法
scanf(“%f%f%f,&a,&x,&b”)
toscanf(“%f%f%f,&a,&x,&b)
scanf(“%d,&m”)代码>到scanf(“%d”和&m)代码>
printf(“你的答案是:L=%.3f,L”)代码>到printf(“你的答案是:L=%.3f”,L)代码>
执行结束了吗?欢迎来到堆栈溢出!请使用您的代码将其简化为您的问题的一部分。您当前的代码包含了许多与您的问题无关的内容—一个最小的样本通常看起来类似于一个好的单元测试:只执行一个任务,输入值指定用于再现性。@Tomkarze不正确。见C标准第1段5.1.2.2.3程序终止。“…到达终止main
函数的}
时,返回的值为0。”(这确实假设正在使用的编译器符合C99(或更高版本)的要求。)正如@Neo所暗示的,您可能会得到异常终止,可能是由除零错误造成的。使用调试器逐步检查代码。您还可以在每次完成后将stdout
刷新到printf()
:fflush(stdout)代码>,IIRC。旁白:如果缩进样式一致,那么任何代码都更容易理解-将一些代码放在单独的行上,然后将一些代码填充在{
和}
之间的一行上是令人困惑的。您的scanf
不是为我编译的-结尾双引号应该在第一个逗号之前。否。根据5.1.2.2.3程序终止,第1段:“…到达终止main
函数的}
时返回的值为0”。@AndrewHenle AFAIK一些旧实现可能不会隐式返回0。这不是问题所在。删除答案。
#include <stdio.h>
#include <math.h>
int main() {
float a,x,b;
float L;
int m;
printf("Enter variables a,x,b:");
scanf("%f%f%f,&a,&x,&b");
printf("For using for instruction (enter 1)");
printf("For using while instruction (enter 2)");
printf("For using do-while instruction (enter 3)");
printf("For using ef instruction (enter 4)");
scanf("%d,&m");
switch(m){
case 1:
for (x=0;x<1.2;x++)
{
L=2*cos(x-(3.14/6));
}
for (x=0;x>= 1.2 && x<=3.9;x++)
{
L=x*x/(a+cos(powf((x+b),3)));
}
for (x=0;x>3.9;x++)
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
break;
case 2:
while (x<1.2)
{
L=2*cos(x-(3.14/6));
}
while (x>= 1.2 && x<=3.9)
{
L=x*x/(a+cos(powf((x+b),3)));
}
while (x>3.9)
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
break;
case 3:
do
{
L=2*cos(x-(3.14/6));
}
while (x<1.2);
do
{
L=x*x/(a+cos(powf((x+b),3)));
}
while (x>= 1.2 && x<=3.9);
do
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
while (x>3.9);
break;
case 4:
if (x<1.2)
{
L=2*cos(x-(3.14/6));
}
else
{
printf("First statement is false");
}
if(x>= 1.2 && x<=3.9)
{
L=x*x/(a+cos(powf((x+b),3)));
}
else
{
printf("Second statement is false");
}
if(x>3.9)
{
L=fabs(x/2*a)+powf(sin(x+1),2);
}
else
{
printf("Third statement is false");
}
break;
default:
printf("\nNo right choices\n");
}
printf("Your answer is: L = %.3f,L");
}