2010-11-21 4 views
1
scanf("%ld",&l); 
printf ("l=%ld",l); 
switch (l) 
{ 
case'1': 
XOR(&matrix1[10],&matrix2[10],m); 
break; 
case'2': 
AND(&matrix1[10],&matrix2[10],m); 
break; 
default: 
printf("\n\t\tWrong input"); 
} 

프로그램에 상관없이 (이것은 옳고 그름의 여부를) 내가 입력 한 내용 switch에 도달하지 난을 입력 한하지만, 프로그램, 마사지 (잘못된 입력)를 보여주는 유지하는 경우 오른쪽 번호 (1 또는 2).C에서 (스위치)에 문제

+0

l입니까? int 또는 char? 나는 당신이 보여주고있는 코드에서 명확하지 않기 때문에 묻고있다. –

+1

@Grigory : 내가 long int인지 분명해야한다. –

+1

변수 이름을 지으려면 1을 사용하지 마십시오. 오, 잠깐, 내가 그거야? 아니면 ...? ehh – erenon

답변

5

변경 귀하의 경우는

case'1': 
    ... 
case'2': 
    ... 

case 1: 
    ... 
case 2: 
    ... 

에 대한 설명에서 레이블 : 스위치의 값이 정수 문자가 아니라는 것입니다, 따라서 당신이 당신의 경우 레이블에 대한 정수 상수가 필요합니다 , 아니 문자 상수입니다.

1

귀하의 사례는 case 1이어야하며 case '1'이 아니어야합니다.

0

및 1은 동일하지 않습니다.

1

'1'= 1

참고 :! '1'은 거의 60이나 뭐 그런 '작은 따옴표는 "문자를 사용하여"을 의미 원인 (또는 그것은 ASCII 코드이다).

scanf("%ld",&l); printf ("l=%ld",l); switch (l) { case 1: XOR(&matrix1[10],&matrix2[10],m); break; case 2: AND(&matrix1[10],&matrix2[10],m); break; default: printf("\n\t\tWrong input"); } 

을 또는 당신은 숯불을 숫자로 입력 내용을 변경할 수 있습니다 : 스위치의 경우에서 '에게 그들을 제거하십시오 스위치는 정수에 의존

scanf("%c", &l); 
0

때문입니다. 반면에 당신은 끈을 잡는 중입니다. 먼저 atoi를 통해 l을 실행해야합니다.

+0

"% ld"는 'long'에 대한 형식 지정자입니다. 그가 끈을 읽고 있다고 생각하는 이유는 무엇입니까? 너는 그 길을 잘못 잡았다. 스위치는 문자 상수에 있지만 입력은 정수입니다. – Clifford

1

하지만 당신은 문자를 읽지는 않지만 당신의 경우는 문자입니다. 다시 쓰기 다음과 같이

switch (l) 
{ 
case 1: 
XOR(&matrix1[10],&matrix2[10],m); 
break; 
case 2: 
AND(&matrix1[10],&matrix2[10],m); 
break; 
default: 
printf("\n\t\tWrong input"); 
} 
0

'1'은 문자 대신 일반 숫자 1.의 ASCII 표현 일 것입니다.

case '1': 

가 동일하지 않습니다 : 때문입니다

case 1: 
    /*...*/ 
    break; 
0

case 1: 

두 번째는 당신이 기대하는 것 같다 하나입니다.

관련 문제