2015-01-27 1 views
-1

스위치와 "? :"를 사용하여 숫자가 양수, 음수 또는 0인지 테스트하는 코드를 작성해야합니다. 여기에 내가 가진 것이있다. 음수 값은 작동하지 않는 것 같아서 제로를 구현하는 방법을 알 수 없습니다. 사실, 나는 case1, case2 및 switch 문법 전체가 어떻게 작동하는지 완전히 이해하지 못합니다.스위치와 "? :"를 사용하여 양수/음수를 테스트하는 C++ 코드

#include <iostream> 

using namespace std; 

int main() 
{ 
int a; 
int b; 

cout << "Please enter the value to be tested: "; 
cin >> a; 

(a > 0) ? (b = 1) : (b = 2); 

switch (b) 
{ 
    case 1: 
     cout << "The given value is positive." << endl; 
     break; 
    case 2: 
     cout << "The given value is negative." << endl; 
     break; 
} 

return 0; 
} 
+2

하나의 방법이며, 찾을 수있는 방법 중 하나를 사용할 수 있습니다 *. 예 : 'b' 대신'is_positive'에 대해서 생각해보십시오. 그러면 'bool'유형이어야한다는 것을 쉽게 알 수 있습니다. 아마도'b'는'int' 타입 일 것이지만 당신은 보여주지 않습니다. 유형에 따라 첫 번째 과제도 버그 일 수 있습니다. 할당하는 것보다 다른 값을 테스트하는 것은 분명히 버그입니다. 어쨌든 ** 완전하지만 최소한의 예제 **를 게시해야합니다. –

+0

switch 문 : http : //en.cppreference.com/w/cpp/language/switch – rici

+0

'case 1 :'을'if (b == 1)'로,'case 2 :'를'else로 생각하십시오. if (b == 2)' – David

답변

1

스위치 문 :

스위치 문은 다중 방식 지점을 다루는 if 때 에 편리한 대안을 제공합니다. 우리는 어떤 정수 값 라는 검사를하고 다른 작업을

구문은 값 1, 5 또는 다른 값, 다음 switch 문 이 사용될 수있다 여부에 따라 수행 할 가정 :

switch(expression resulting to integer literals/integer literals/enumeration types/){ 
    case constant-expression : 
     statement(s); 
     break; //optional 
    case constant-expression : 
     statement(s); 
     break; //optional 
    // you can have any number of case statements. 

    default : //Optional and one default statement can be present for a switch 
     statement(s); 
} 

다음과 같은 규칙 switch 문에 적용

  • switch 문에 사용 된 표현식은 정수 또는 열거 형이거나 클래스가 정수 또는 열거 형으로의 단일 변환 함수 을 갖는 클래스 유형이어야합니다.
  • 스위치 내에서 원하는 수의 case 문을 사용할 수 있습니다. 각 경우 다음에 비교할 값과 콜론이옵니다.
  • 사례의 상수 표현식은 스위치의 변수와 동일한 데이터 유형이어야하며 상수 또는 리터럴이어야합니다.
  • 스위치가 켜져있는 변수가 대소 문자와 같으면이 경우 다음에 나오는
    문은 break 문
    에 도달 할 때까지 실행됩니다.
  • break 문에 도달하면 스위치가 종료되고
    제어 흐름이 스위치
    문 다음의 다음 줄로 이동합니다.
  • 모든 경우에 휴식을 포함 할 필요는 없습니다. 중단이 나타나지 않으면
    제어 흐름이 다음의 경우까지 중단
    에 도달 할 때까지 떨어집니다.
  • switch 문은 선택적으로 기본값을 가질 수 있습니다. 스위치 끝에
    이 나타나야합니다. 어떤 경우에도 해당하지 않을 때
    작업을 수행하는 데 기본 경우를 사용할 수 있습니다. 기본 절체는 휴식 시간이 필요하지 않습니다. . 다음과 같이

그것은 작동합니다 -

  • 표현, 단지 테스트를,이 경우 평가된다.
  • 케이스 라벨은 값과 일치하는 라벨을 차례로 확인합니다.
  • 일치하지 않고 선택적 기본 레이블이 존재하면 이 선택되고, 그렇지 않으면 스위치 복합 문에서 제어가 전달됩니다.
  • 일치하는 레이블이 있으면 실행이 진행됩니다. 제어 은 스위치 문 내의 나머지 레이블을 모두 통과합니다. 일반적으로 원하는 것이 아니기 때문에 break 문은 스위치 문에서 컨트롤을 전송하기 위해 다음 사례 레이블 앞에 추가됩니다.
  • 하나 이상의 유용한 예외는 둘 이상의 값에 대해 동일한 처리를 수행하려는 경우 발생합니다. 값 1과 10이 같은 일을하고 다음을 원한다고 가정하십시오. -

    사례 1 : /*. 모든 사례 수 . */ case 10 : // 사례 1 - 10에 대한 아래 명령문 처리 break;

작품 테스트 = 1의 경우 그냥 다음 섹션에 "을 통해 떨어진다"때문이다.

조건 연산자 :?

삼항 연산자 (: C 및 C++에서 사용되는 매우 유용한 조건식입니다. 효과는 if 문과 비슷하지만 몇 가지 큰 이점이 있습니다.

원계 연산자를 사용하여 기본 구문 따라서이다로서

(condition) ? (if_true) : (if_false) 

기본적으로 동일 함 :

if (condition) 
    if_true; 
else 
    if_false; 

"상태"는 사실 때문에 경우 두 번째 표현 실행한다 ("if_true"), 그렇지 않으면 세 번째가 실행됩니다 ("if_false").

당신 코드의 경우 :

당신은 그것은 * 설명 이름을 사용하는 것이 좋습니다,

#define POSITIVE (1) 
#define NEGATIVE (-(1)) 
#define ZERO (0) 
switch ((user_input >= ZERO)? POSITIVE : NEGATIVE) 
{ 
    case POSITIVE: 
     if(user_input == ZERO) 
     { 
      cout << "The given value is a Zero." << endl; 
     } 
     else 
     { 
      cout << "The given value is positive." << endl; 
     } 
     break; 
    case NEGATIVE: 
     cout << "The given value is negative." << endl; 
     break; 
} 
관련 문제