why do i get 6 from default statement if my input was another character other than (+, -, *, /)

huangapple go评论176阅读模式
英文:

why do i get 6 from default statement if my input was another character other than (+, -, *, /)

问题

  1. 我每次执行默认语句时都会得到6,无论输入是什么
  2. 这是我的输入
  3. (
  4. 输入2个数字
  5. 第一个数字 4
  6. 第二个数字 8
  7. 输入操作符
  8. 操作符 H
  9. )
  10. 输出结果
  11. (
  12. 错误
  13. 答案是 6
  14. )
英文:
  1. #include <stdio.h>
  2. int calculator(int num1,int num2, char p)
  3. {
  4. switch(p)
  5. {
  6. case '+':
  7. return num1+num2;
  8. case '-':
  9. return num1-num2;
  10. case '*':
  11. return num1*num2;
  12. case '/':
  13. return num1/num2;
  14. default:
  15. printf("Error\n");
  16. break;
  17. }
  18. }
  19. int main()
  20. {
  21. int num1,num2,answer=0;
  22. char p;
  23. while(1)
  24. {
  25. answer=0;
  26. printf("Enter 2 numbers\n");
  27. scanf("%d%d",&num1,&num2);
  28. printf("Enter the operator\n");
  29. scanf(" %c",&p);
  30. answer=calculator(num1,num2,p);
  31. printf("the answer is %d\n",answer);
  32. }
  33. return 0;
  34. }

I get 6 every time the default statement is executed no matter the input
this is my input
(
Enter 2 numbers
first number 4
second number 8
Enter the operator
operator H
)
the output
(
Error
the answer is 6
)

答案1

得分: 4

你的 calculator 函数在 break 的情况下没有执行 return。严格来说,这是未定义行为。请参考 https://stackoverflow.com/questions/7280877/why-and-how-does-gcc-compile-a-function-with-a-missing-return-statement

英文:

Your calculator function doesn't execute a return for the break fallthrough case. Strictly speaking this is undefined behavior. See https://stackoverflow.com/questions/7280877/why-and-how-does-gcc-compile-a-function-with-a-missing-return-statement

答案2

得分: 1

以下是您要翻译的代码部分:

  1. 这是因为在您的 `default:` 情况下没有返回任何内容,它是未定义的行为。您还需要通知调用者函数失败了。您可以通过设置 [哨兵值][1] 或引入另一个参数来指示错误来实现这一点。
  2. #include <stdio.h>
  3. int calculator(int num1, int num2, char p, int *error)
  4. {
  5. int result = 0;
  6. *error = 0;
  7. switch (p)
  8. {
  9. case '+':
  10. result = num1 + num2;
  11. break;
  12. case '-':
  13. result = num1 - num2;
  14. break;
  15. case '*':
  16. result = num1 * num2;
  17. break;
  18. case '/':
  19. result = num1 / num2;
  20. break;
  21. default:
  22. *error = 1;
  23. break;
  24. }
  25. return result;
  26. }
  27. int main(void)
  28. {
  29. int num1, num2, answer = 0, error;
  30. char p;
  31. while (1)
  32. {
  33. answer = 0;
  34. printf("输入2个数字\n");
  35. if (scanf("%d %d", &num1, &num2) != 2)
  36. {
  37. printf("您输入了错误的数字\n");
  38. continue;
  39. }
  40. printf("输入操作符\n");
  41. if (scanf(" %c", &p) != 1) { /* 处理错误 */ };
  42. answer = calculator(num1, num2, p, &error);
  43. if (error)
  44. printf("错误\n");
  45. else
  46. printf("答案是 %d\n", answer);
  47. }
  48. return 0;
  49. }
  50. 您还需要检查 `scanf` 是否失败。
  51. [1]: https://en.wikipedia.org/wiki/Sentinel_value

请注意,这是代码的翻译版本,没有其他内容。

英文:

It is undefined behaviour as you do not return anything in your default: case. Also you need to let the caller that your function failed. You can do this by setting a sentinel value or introducing another parameter which will indicate the error.

  1. #include &lt;stdio.h&gt;
  2. int calculator(int num1,int num2, char p, int *error)
  3. {
  4. int result = 0;
  5. *error = 0;
  6. switch(p)
  7. {
  8. case &#39;+&#39;:
  9. result = num1+num2;
  10. break;
  11. case &#39;-&#39;:
  12. result = num1-num2;
  13. break;
  14. case &#39;*&#39;:
  15. result = num1*num2;
  16. break;
  17. case &#39;/&#39;:
  18. result = num1/num2;
  19. break;
  20. default:
  21. *error = 1;
  22. break;
  23. }
  24. return result;
  25. }
  26. int main(void)
  27. {
  28. int num1,num2,answer=0, error;
  29. char p;
  30. while(1)
  31. {
  32. answer=0;
  33. printf(&quot;Enter 2 numbers\n&quot;);
  34. if(scanf(&quot;%d %d&quot;,&amp;num1,&amp;num2) != 2)
  35. {
  36. printf(&quot;you have entered wrong numbers\n&quot;);
  37. continue;
  38. }
  39. printf(&quot;Enter the operator\n&quot;);
  40. if(scanf(&quot; %c&quot;,&amp;p) != 1) { /* handle arror */};
  41. answer=calculator(num1,num2,p, &amp;error);
  42. if(error)
  43. printf(&quot;Error\n&quot;);
  44. else
  45. printf(&quot;the answer is %d\n&quot;,answer);
  46. }
  47. return 0;
  48. }

You also need to check if the scanf did not fail.

huangapple
  • 本文由 发表于 2023年6月15日 16:12:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76480417.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定