Ошибка из-за case - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот моя программа
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <memory.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <math.h>
  7. #define N 40
  8. //Var 4
  9. int main()
  10. {
  11. int n=0,j=0,i,is_symbol_entered=0,is_number_trizn=0,condition_of_exit=0,Sum=0,Mult=0;
  12. char s[N]={0};
  13. double leg1 = 0.0,leg2 = 0.0,hyp=0.0;
  14. printf("Input 'a' or 'b' for choice variant or 'e' for exit: ");
  15. while ((j = getchar())!=EOF)
  16. {
  17. switch (j)
  18. {
  19. case 'a':
  20. {
  21. printf("\nInput legs: ");
  22. printf("leg1= ");
  23. scanf("%lf",&leg1);
  24. printf("\nleg2= ");
  25. scanf("%lf",&leg2);
  26. if ((leg1>0) && (leg2>0))
  27. {
  28. hyp=sqrt((pow(leg1,2)+pow(leg2,2)));
  29. printf("\nhypotenuse=%.1lf\n",hyp);
  30. }
  31. else
  32. {
  33. printf("Error! You input negative leg!");
  34. }
  35. }
  36. break;
  37. case 'b':
  38. {
  39. printf("Input number: ");
  40. for (i=0; i<N-1 && (n != '\n') ; i++)
  41. {
  42. n=getchar();
  43. if (i==0 && (n=='\n' || n==EOF || n=='0'))
  44. {
  45. is_symbol_entered=1;
  46. }
  47. if (n==EOF || n=='\n')
  48. {
  49. break;
  50. }
  51. s[i]=n;
  52. if (i>=3)
  53. {
  54. is_number_trizn=1;
  55. }
  56. else
  57. {
  58. if (n<'0' || n>'9')
  59. {
  60. is_symbol_entered=1;
  61. }
  62. }
  63. }
  64. if (is_symbol_entered!=1 && is_number_trizn!=1 && (i==3))
  65. {
  66. atoi(s);
  67. Sum=s[0]-'0'+s[1]-'0'+s[2]-'0';
  68. Mult=(s[0]-'0')*(s[1]-'0')*(s[2]-'0');
  69. printf("Thousand: %c ",s[0]);
  70. printf("Ten: %c ",s[1]);
  71. printf("One: %c ",s[2]);
  72. printf("\nSum: %i",Sum);
  73. printf("\nmult: %i\n",Mult);
  74. }
  75. else
  76. {
  77. printf("Error!\n");
  78. }
  79. }
  80. break;
  81. case 'e':
  82. exit(1);
  83. default:
  84. printf("\nPlease enter 'a' or 'b' or 'e' for exit: ");
  85. }
  86. }
  87. getch();
  88. return 0;
  89. }
При вводе допустим as он выводит case a и все ошибки из него и еще позиция default выводится ,причем не один раз ,а столько сколько букв ввел... Как я понял это из-за цикла while но убрать его я не могу. Как мне сделать чтобы блокировались остальные буквы и просто выдавалась ошибка в случае ввода больше одной буквы??

Решение задачи: «Ошибка из-за case»

textual
Листинг программы
  1. ...
  2.     char j[2];
  3.     while (1)
  4.     {
  5.         printf("Input 'a' or 'b' for choice variant or 'e' for exit: ");
  6.         scanf("%s",&j);
  7.         if (strlen(j)==1)
  8.     switch (*j)
  9.         {
  10.         case 'a':
  11.             {
  12.                 printf("\nInput legs: ");
  13.                 printf("leg1= ");
  14.                 scanf("%lf",&leg1);
  15.                 printf("\nleg2= ");
  16.                 scanf("%lf",&leg2);
  17.                 if ((leg1>0) && (leg2>0))
  18.                 {
  19.                         hyp=sqrt((pow(leg1,2)+pow(leg2,2)));
  20.                         printf("\nhypotenuse=%.1lf\n",hyp);
  21.                 }
  22.                 else
  23.                 {
  24.                     printf("Error! You input negative leg!\n");
  25.                 }
  26.             }
  27.             break;
  28.         case 'b':
  29.             {
  30.                 printf("Input number: ");
  31.                 for (i=0; i<N-1 && (n != '\n')  ; i++)
  32.                 {
  33.                     scanf("%d",&n);
  34.                     if (i==0 && (n=='\n' || n==EOF || n=='0'))
  35.                     {
  36.                         is_symbol_entered=1;
  37.                     }
  38.                     if (n==EOF || n=='\n')
  39.                     {
  40.                         break;
  41.                     }
  42.                     s[i]=n;
  43.                     if (i>=3)
  44.                     {
  45.                         is_number_trizn=1;
  46.                     }
  47.                     else
  48.                     {
  49.                         if (n<'0' || n>'9')
  50.                         {  
  51.                             is_symbol_entered=1;
  52.                         }
  53.                     }
  54.                 }
  55.                 if (is_symbol_entered!=1 && is_number_trizn!=1 && (i==3))
  56.                 {
  57.                     atoi(s);
  58.                     Sum=s[0]-'0'+s[1]-'0'+s[2]-'0';
  59.                     Mult=(s[0]-'0')*(s[1]-'0')*(s[2]-'0');
  60.                     printf("Thousand: %c ",s[0]);
  61.                     printf("Ten: %c ",s[1]);
  62.                     printf("One: %c ",s[2]);
  63.                     printf("\nSum: %i",Sum);
  64.                     printf("\nmult: %i\n",Mult);
  65.                 }
  66.                 else
  67.                 {
  68.                     printf("Error!\n");
  69.                     n=0;
  70.                 }
  71.             }
  72.             break;
  73.         case 'e':
  74.             exit(1);
  75.         default:
  76.             continue;  
  77.       }
  78.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут