실수인지 아닌지를 판별하는 프로그램을짤려고하는데요(조금급합니다 ㅠㅠ)

dmlflvk1의 이미지

#include<stdio.h>
void main()
{
	int state=0, sym;
	char ch;
	int any=0;
 
	int a[11][5] = {{2,10,10,1,9}
					,{2,10,10,10,9}
					,{2,5,10,10,3}
					,{4,5,8,10,10}
					,{4,5,8,10,10}
					,{7,10,10,6,10}
					,{7,10,10,10,10}
					,{7,10,8,10,10}
					,{10,10,10,10,10}
					,{4,10,10,10,10}
					,{10,10,10,10,10}};
	do{
		ch = getchar();
		if(ch=='\n')
			return 0;
	}
 
	while((ch=getchar())!='\n'){
		if(ch==0||1||2||3||4||5||6||7||8||9)
			sym=0;
		else if(ch=='e'||'E')
			sym=1;
		else if(ch=='f'||'F'||'l'||'L')
			sym=2;
		else if(ch=='+'||'-')
			sym=3;
		else if(ch=='.')
			sym=4;
		else
			printf("");
	}
	state = a[state][sym];
	if(state=8)
		printf("실수입니다.");
	else
		printf("실수가아닙니다.");
	}
 
}

첫째. 이프로그램은 사용자가 앤터만 칠때까지 계속돌아야되구요
둘째. 실수갑을 사용자가치면 실수입니다 가뜨고 실수값이 아닌값을치면 실수가아닙니다라고 나와야되요;;;;
도데체 어디가문제인지를모르겠네요ㅠㅠ

고수님들 좀부탁드립니다(_ _)

neocoin의 이미지

.

익명 사용자의 이미지

두 가지 조건을 만족하는 경우를 찾기 위해선
ch == 0 || ch == 1
라고 쓰셔야 합니다.
ch == 0 || 1 라고 쓸 경우
0 || 1 가 먼저 평가되서 1이라는 값을 가지게 되고 ch == 1 이 평가되면서 ch이 1과 같은지 비교하게 됩니다.

n가지 조건을 만족하는 경우에 대해서도 마찬가지 입니다.

익명 사용자의 이미지

state=8 -> state == 8