2013-07-14 5 views
0

다음 코드는하지만,이 책 Let Us C(Yashwant Kanetkar)는 하나의 표현 for 루프의 테스트 표현식에서 허용되는 것을 말한다 오류 또는 경고for 루프에 여러 조건이 허용됩니까?

#include<stdio.h> 

int main(){ 
    int i, j; 
    int p = 0, q = 2; 
    for(i = 0, j = 0; i < p, j < q; i++, j++){ 
     printf("HelloWorld\n"); 
    } 
    return 0; 
} 

을주지 않고 실행됩니다. (책의 페이지 115 참조).

표준에 대해 확실하지 않습니다. for 루프의 테스트 표현식에 여러 표현식을 사용할 수 있습니까?

EDIT : 분명히이 두 표현식을 결합 할 수는 있지만 위의 코드를 찾을 때 나는 어색하다. website. 내 질문은이 유효한 C 코드 또는 아닙니다?

+1

예 물론 웹 사이트에서 위의 코드를 발견했을 때 나는 당황 스러웠습니다. http://www.geeksforgeeks.org/output-of-c-program-set-22/ –

+0

C 표준은 매우 다릅니다. C89 및 C99. C 언어 컴파일러의 다양한 구현에는 변형이 있습니다. 귀하의 코드가 정확합니다. – Farshid

+0

이 코드는 정확합니다. - '쉼표 (comma)'연산자는 피연산자를 평가하고 결과는 마지막 피연산자입니다. 예 :'int a = 1,2; // here a = 2' –

답변

7

조건

i < p, j < q 

은 허용하지만, 아마 첫 번째 표현식의 결과를 버리고 오직 j < q의 결과를 반환으로 의도 된 것이 아니다된다. comma operator은 쉼표의 왼쪽에있는 표현식을 평가하고 폐기 한 다음 오른쪽 표현식을 평가하여 반환합니다. 당신이 && 연산자를 사용, 두 조건을 테스트하려면

여러 조건을 테스트하려면

논리 대신

i < p && j < q 
+0

실제로 편집 부분에 따라 C OP의 confunction에 ','연산자를 추가해야합니다. –

+0

@GrijeshChauhan 업데이트 된 답변이 더 명확합니까? – simonc

+0

예. 나는 OP에 관한 십자가 문제 또는 그의 의심을 제기하지 않을만큼 충분하다고 생각합니다. –

5

당신은 부울와 함께 연결 수 (& &)

for(i = 0, j = 0; (i < p) && (j < q); i++, j++){ 

위의 (i < p) 조건이 & p는 같은 값 모두 내가 같이 즉시 실패하기 때문에 루프에 아무것도 출력하지 않습니다 (0)이다.

업데이트 : 귀하의 예제는 i = 30으로 시작하면 쉼표로 구분 된 목록의 첫 번째 결과가 무시되므로 루프가 여전히 2 회 실행되므로 유효합니다.

1
for(i = 0, j = 0; i < p && j < q; i++, j++){ 
+0

아니요, 'i

3

연산자 &&를 사용합니다.

코드에서 어떤 일이 일어나는지는 쉼표 연산자 ,의 작동 방식과 관련이 있습니다.

i < pj < q 모두 평가되지만 두 번째 표현식 j < q의 결과 만 for 루프에 의해 검사됩니다.

1

심지어 나는 Yashwant Kanetkar 씨가 그 책을 읽었습니다. 그것은 하나의 조건 만 for 루프에서 허용된다고 말하지만, 논리 연산자를 사용하여 for 루프에서 여러 조건을 추가 할 수 있습니다. 내가 읽은 시간이 이전 인 다른 책들에서는 단 하나의 조건 만 허용된다고 말했습니다.