2016-11-26 13 views
-6

경우 하나를 사용하지 않고 조건에서 어떤 진술을한다.
n이 양수이면 '+'를 출력하고, n이 음수이면
'-'를 출력하고, n이 0이면
을 출력합니다.내가 흐르는 문제를 해결하기 위해 노력하고

단일 if를 사용하지 않고 c \ C++ 솔루션을 작성하십시오!

는이 코드 작성 :

int n; 
scanf("%d", &n); 

! n >> (sizeof(n) - 1) && printf("-") || return 0; 
n > 0 && prtintf("+") || return 0; 
printf("0"); 
retuen 0; 

을하지만 난 오류 얻을 : 온라인 3 '복귀'전에 예상되는 주요 표현을하고 4 가 어떻게 작동하도록이 코드를 변경할 수 있습니다!

p.s :? : 연산자는 속임수로 간주됩니다!

+0

'return (n> 0?'+ ': (n <0?'- '0'))' –

+0

삼항 조건부 연산자를 사용하십시오 : '? :

+0

게시 한 코드가 가장 일관성이 없습니다. 이 코드를 "고치기"위해서는 먼저 어떻게 작동시킬 것인지 설명해야합니다. 당신이 올린 글에서 완전히 불분명합니다. – AnT

답변

0

예, 일부 제한 사항이 있습니다. if에 명시 적으로,도 while 또는 for,이나 바로 가기 ...?...:...와 암시도

#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h> 

// Assuming 2s-complement numbers 
// and an understanding compiler 
// Some checks omitted! 

int main(int argc, char **argv) 
{ 
    int input; 
    unsigned int itmp; 
    int size; 
    int sign, sin, sout; 
    char out[3] = { '0', '+', '-' }; 


    if (argc != 2) { 
    fprintf(stderr, "Usage: %s integer\n", argv[0]); 
    exit(EXIT_FAILURE); 
    } 
    // TODO: use strtol and check input! 
    input = atoi(argv[1]); 

    size = sizeof(int) * CHAR_BIT; 
    itmp = (unsigned int) input; 

    sin = itmp >> (size - 1); 
    sign = sin^1; 

    // now "sign" is either 0 (negative) or 1 (positive) 
    // but we need 1 (negative) and -1 (positive) 
    // 0 * -2 + 1 = 1 
    // 1 * -2 + 1 = -1 

    sign = sign * -2 + 1; 

    // Now we can do 
    // in sign out sin sout 
    // -x * 1 = -x -> 1 + 1 = 2 
    // +x * -1 = -x -> 0 + 1 = 1 
    // 0 * -1 = 0 -> 0 + 0 = 0 

    itmp = itmp * sign; 
    sout = itmp >> (size - 1); 

    sign = sin + sout; 

    printf("Input: %c\n", out[(size_t) sign]); 

    exit(EXIT_SUCCESS); 
} 

없음 조건식.

0

조건부 연산자 ?:은 여기에서 가장 간단하고 가장 적절한 대답입니다.

하지만 당신이 원한다면 내가 제대로 원래 코드의 의도로 보일 수 있습니다 logocal 사업자의 단락 속성을 기반으로 솔루션을 해독 경우

int n = -5; 
... 
const char s[] = { '-', '0', '+' }; 
std::cout << (s + 1)[(n > 0) - (n < 0)] << std::endl; 

을 할 수는

(n < 0 && (std::cout << '-', true)) || 
    (n > 0 && (std::cout << '+', true)) || 
    (std::cout << '0', true); 
std::cout << std::endl; 
을 다음과

return 문을 식에 삽입하지 마십시오. return은 연산자가 아닌 명령문입니다. 표현식에 return을 사용할 수 없습니다.

+0

하지만 프로그램을 종료하기 위해 exit (코드)를 사용할 수 있습니다. 함수를 종료하고 싶습니다. – user3073850

+0

@ user3073850 : 첫째, 'exit'는 함수를 종료하지 않습니다. 전체 프로그램을 종료합니다. 둘째로, "기능을 종료"한 것은 어디에서 왔습니까? 원래 게시물은 "기능"또는 "종료"에 대해 아무것도 말하지 않습니다. – AnT

+0

질문을 수정 죄송합니다 – user3073850

관련 문제