首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复"return 0/ exit(0)在for循环内不能正常工作“?

如何修复"return 0/ exit(0)在for循环内不能正常工作“?
EN

Stack Overflow用户
提问于 2019-04-29 00:48:26
回答 1查看 67关注 0票数 -1

我在做一个科学计算器。并考虑循环语句,直到用户通过使用0作为其中一个选项来请求停止。但即使在输入0之后。它最后一次询问以下语句:printf("Enter two numbers (For only one no. required you can just enter other number anything)\n");

我尝试过使用goto, exit(0)return 0语句。甚至while(1)for(;;)也会循环。

代码语言:javascript
复制
#include <stdio.h>
#include<math.h>
int main()
{
    int a;
    float b,c;
    float d=3.14159/180;
    while(1)
    {
    printf("\nScientific Calculator :\n");
    printf("Enter option:\n 0- Exit, 1-Add, 2-Sub, 3-Multiply, 4-Divide,\n 5-sin(x), 6-cos(x), 7-tan(x), 8-sinh(x), 9-cosh(x), 10-tanh(x),\n11-log10(x),12-exponent,13-power of x w.r.t y \n");
    scanf("%d",&a);
    printf("Enter two numbers (For only one no. required you can just enter other number anything)\n"); //Here is where it starts even after return 0
    scanf("%f%f",&b,&c); //Here after inputting value it ends.
    switch(a)
    {
        case 0:return 0; //Here is the return 0;
        case 1:printf("%d",(int)(b+c)); break;
        case 2:printf("%d",(int)(b-c)); break;
        case 3:printf("%d",(int)(b*c)); break;
        case 4:printf("%f",b/c); break;
        case 5:printf("%f",sin(b*d)); break;
        case 6:printf("%f",cos(b*d)); break;
        case 7:printf("%f",tan(b*d)); break;
        case 8:printf("%f",sinh(b*d)); break;
        case 9:printf("%f",cosh(b*d)); break;
        case 10:printf("%f",cosh(b*d)); break;
        case 11:printf("%f",tanh(b*d)); break;
        case 12:printf("%f",log10(b)); break;
        case 13:printf("%f",exp(b)); break;
        case 14:printf("%f",pow(b,c)); break;
        default:printf("Enter correct option\n");
    }
    }
    return 0;

}

我想让它退出程序,但它要求输入printf("Enter two numbers ---\n");,在输入值之后,它退出。

EN

回答 1

Stack Overflow用户

发布于 2019-04-29 00:53:31

,但即使在输入0之后。它最后一次询问以下语句:printf("Enter two numbers (For only one no. required you can just enter other number anything)\n");

您需要立即检查大小写“0”,因此

printf("Enter option:\n 0-退出,1-加,2-除,3-乘,4除,\n 5-正弦(X),6-cos(x),7-tanh(X),8-sinh(x),9-cosh(x),10-tanh(x),\n11-log10(X),12-指数,13-x的幂w.r.t y \n");scanf("%d",&a);printf(“输入两个数字(只有一个否。required您只需输入其他数字)\n“);//即使在返回0 scanf("%f%f",&b,&c)之后,它也会从这里开始;//在这里输入值之后,它就会结束。开关(A)情况0:返回0;//这里是返回0;情况1:printf("%d",(int)(b+c));break;...

必须是

代码语言:javascript
复制
printf("Enter option:\n 0- Exit, 1-Add, 2-Sub, 3-Multiply, 4-Divide,\n 5-sin(x), 6-cos(x), 7-tan(x), 8-sinh(x), 9-cosh(x), 10-tanh(x),\n11-log10(x),12-exponent,13-power of x w.r.t y \n");
scanf("%d",&a);
if (a == 0)
  return 0;

printf("Enter two numbers (For only one no. required you can just enter other number anything)\n"); //Here is where it starts even after return 0
scanf("%f%f",&b,&c); //Here after inputting value it ends.
switch(a)
   case 1:printf("%d",(int)(b+c)); break;
   ...

注检查输入的int是否有效也是一个好主意,因此要检查scanf("%d",&a)是否返回1,对于scanf("%f%f",&b,&c)也是如此,因此检查它将返回2……

正如@OznOg对于案例12和13所说的,你只需要读一个数字,而不是两个。另请注意,如果代码无效,则询问号码是无用的,因此:

代码语言:javascript
复制
  if (scanf("%d",&a) != 1)
    return -1;

  if (a == 0)
    return 0;

  if ((a < 0) || (a > 14))
    printf("Enter correct option\n");
  else if ((a == 12) || (a == 13)) {
    printf("Enter one number\n");
    if (scanf("%f",&b) != 1)
      return -1;
    if (a == 12)
      printf("%f",log10(b)); 
    else
      printf("%f",exp(b)); break;
  }
  else {
    printf("Enter two numbers\n");
    if (scanf("%f%f",&b,&c) != 2)
      return -1;
    switch(a)
    {
    case 1:printf("%d",(int)(b+c)); break;
    case 2:printf("%d",(int)(b-c)); break;
    case 3:printf("%d",(int)(b*c)); break;
    case 4:printf("%f",b/c); break;
    case 5:printf("%f",sin(b*d)); break;
    case 6:printf("%f",cos(b*d)); break;
    case 7:printf("%f",tan(b*d)); break;
    case 8:printf("%f",sinh(b*d)); break;
    case 9:printf("%f",cosh(b*d)); break;
    case 10:printf("%f",cosh(b*d)); break;
    case 11:printf("%f",tanh(b*d)); break;
    case 14:printf("%f",pow(b,c)); break;
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55892502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档