2014-08-29 4 views
0
난 아직도 C를 배우고 내가 추적에보고하고있어 일부 이해하려고 노력 중이 야

: 분명히C 형식 문자열 질문

printf("%s ", row[i] ? row[i] : "NULL"); 

, 나는 %sprintf 알고 있어요 내가 돈 ? :을 이해하고 다른 옵션이 무엇인지 이해해야합니다. 나는 용어에 익숙하지 않아서 이것이 "형식 문자열"의 일부인지 확신 할 수 없다. 내가 이것을 가정 할 때 row[i]을 반환하고 에 도달 할 때까지 row[i]을 계속 반환합니까?

좀 더 나은 것을 배우고 이해하는 올바른 방향의 설명과 포인터는 극명하게 평가 될 것입니다.

+3

:

[conditional boolean evaluation] ? [value if true] : [value if false] 

그래서, 당신이 아래의 예와 같은 것을 포함 할 수 있습니다 : 그들은 다음과 같은 구문을 따라야? 삼항 연산자입니다 http://en.wikipedia.org/wiki/%3F : #C – user1336087

답변

2

이것을 trenary 연산자라고합니다. 문이 <condition> ? <res1> : <res2> 인 경우 condition이 참으로 계산되면 문은 res1으로, 그렇지 않으면 res2으로 계산됩니다.

+2

ternary가 아닌 ternary. 그리고 더 정확하게는 "condtional operator"라고 불립니다. 이 연산자는 세 개의 피연산자를 사용하는 언어에서 유일한 연산자이기 때문에 "삼항 연산자"라고합니다. –

3

문자열 형식과 아무 관련이 없습니다. 이것은 이라는 3 진 연산이라고하는 통사적인 설탕 조각입니다. 모양은 다음과 같습니다 : <condition> ? <if_true> : <if_false>. 은이 동일합니다, 확장 :

if (row[i]) 
{ 
    result = row[i]; 
} 
else 
{ 
    result = "NULL"; 
} 

printf("%s ", result); 
1

? 연산자는 conditional operator (또는 삼항 연산자)라는 것이있다. 그것은 "인라인 조건문"이라고 생각할 수 있습니다. 공유 한 코드는 다음과 같습니다.

if(row[i] != NULL) { 
    printf("%s ", row[i]); 
} else { 
    printf("%s ", "NULL"); 
} 

조건부 연산자를 함수 또는 할당의 인수로 사용할 수 있습니다.

int y = x < 5 ? 1 : 0; // if x is less than 5, y will be 1, otherwise it will be zero 
+0

고마워요. 제가하고있는 일에 대한 느낌이 들었습니다. 그러나 조건부 연산자에 익숙하지 않았으며 이러한 방식으로 사용할 수 있다는 사실을 전혀 모르고있었습니다. 코드를 크게 줄였습니다 ... 저는 운영자에 대한 더 많은 독해를해야 할 것입니다. 고맙습니다. –