Ошибка из-за case - C (СИ)
Формулировка задачи:
Вот моя программа
При вводе допустим as он выводит case a и все ошибки из него и еще позиция default выводится ,причем не один раз ,а столько сколько букв ввел... Как я понял это из-за цикла while но убрать его я не могу. Как мне сделать чтобы блокировались остальные буквы и просто выдавалась ошибка в случае ввода больше одной буквы??
#include <stdio.h>
#include <conio.h>
#include <memory.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define N 40
//Var 4
int main()
{
int n=0,j=0,i,is_symbol_entered=0,is_number_trizn=0,condition_of_exit=0,Sum=0,Mult=0;
char s[N]={0};
double leg1 = 0.0,leg2 = 0.0,hyp=0.0;
printf("Input 'a' or 'b' for choice variant or 'e' for exit: ");
while ((j = getchar())!=EOF)
{
switch (j)
{
case 'a':
{
printf("\nInput legs: ");
printf("leg1= ");
scanf("%lf",&leg1);
printf("\nleg2= ");
scanf("%lf",&leg2);
if ((leg1>0) && (leg2>0))
{
hyp=sqrt((pow(leg1,2)+pow(leg2,2)));
printf("\nhypotenuse=%.1lf\n",hyp);
}
else
{
printf("Error! You input negative leg!");
}
}
break;
case 'b':
{
printf("Input number: ");
for (i=0; i<N-1 && (n != '\n') ; i++)
{
n=getchar();
if (i==0 && (n=='\n' || n==EOF || n=='0'))
{
is_symbol_entered=1;
}
if (n==EOF || n=='\n')
{
break;
}
s[i]=n;
if (i>=3)
{
is_number_trizn=1;
}
else
{
if (n<'0' || n>'9')
{
is_symbol_entered=1;
}
}
}
if (is_symbol_entered!=1 && is_number_trizn!=1 && (i==3))
{
atoi(s);
Sum=s[0]-'0'+s[1]-'0'+s[2]-'0';
Mult=(s[0]-'0')*(s[1]-'0')*(s[2]-'0');
printf("Thousand: %c ",s[0]);
printf("Ten: %c ",s[1]);
printf("One: %c ",s[2]);
printf("\nSum: %i",Sum);
printf("\nmult: %i\n",Mult);
}
else
{
printf("Error!\n");
}
}
break;
case 'e':
exit(1);
default:
printf("\nPlease enter 'a' or 'b' or 'e' for exit: ");
}
}
getch();
return 0;
}Решение задачи: «Ошибка из-за case»
textual
Листинг программы
...
char j[2];
while (1)
{
printf("Input 'a' or 'b' for choice variant or 'e' for exit: ");
scanf("%s",&j);
if (strlen(j)==1)
switch (*j)
{
case 'a':
{
printf("\nInput legs: ");
printf("leg1= ");
scanf("%lf",&leg1);
printf("\nleg2= ");
scanf("%lf",&leg2);
if ((leg1>0) && (leg2>0))
{
hyp=sqrt((pow(leg1,2)+pow(leg2,2)));
printf("\nhypotenuse=%.1lf\n",hyp);
}
else
{
printf("Error! You input negative leg!\n");
}
}
break;
case 'b':
{
printf("Input number: ");
for (i=0; i<N-1 && (n != '\n') ; i++)
{
scanf("%d",&n);
if (i==0 && (n=='\n' || n==EOF || n=='0'))
{
is_symbol_entered=1;
}
if (n==EOF || n=='\n')
{
break;
}
s[i]=n;
if (i>=3)
{
is_number_trizn=1;
}
else
{
if (n<'0' || n>'9')
{
is_symbol_entered=1;
}
}
}
if (is_symbol_entered!=1 && is_number_trizn!=1 && (i==3))
{
atoi(s);
Sum=s[0]-'0'+s[1]-'0'+s[2]-'0';
Mult=(s[0]-'0')*(s[1]-'0')*(s[2]-'0');
printf("Thousand: %c ",s[0]);
printf("Ten: %c ",s[1]);
printf("One: %c ",s[2]);
printf("\nSum: %i",Sum);
printf("\nmult: %i\n",Mult);
}
else
{
printf("Error!\n");
n=0;
}
}
break;
case 'e':
exit(1);
default:
continue;
}
}