2011-05-04 3 views
0

몇 일 전 이상한 생각으로 if(); 문을 조작하는 내 생각에 이상한 생각이 들었습니다. 간단한 코드로 이동하십시오.C 함수가 테스트 조건으로 호출됩니다.

강령 :

if(printf("blahblah\n");{ 
} 


내 아이디어

:

1) 나를 위해 내가이 코드는 항상 참 생각 (내 가정) 테스트 조건이 함수 호출로 대체 되었기 때문입니다.



그래서 오늘은 책에서 제공하는 운동을하고 있어요 .This 코드입니다 (다만 제가 며칠 전에 배운 내용을 새로 고치 도움).

강령 : 첫 번째 코드 내 아이디어를 사용하여

#include <stdio.h> 

int main(void) // This program would add up the value enter by user , for e.g with the 
{    //input of 20 , it will print out the sum of 1+2+3+4+5.....20. 

int count , sum , size; 

count = 0; 

sum = 0; 

    printf("Enter a value to find the sum of it from 1 : "); 
    scanf("%d" , &size); 

    while (count++ < size) 

    sum = sum + count; 

    printf("sum = %d\n" , sum); 

return 0; 
} 



, 나는 이것으로 두 번째 코드를 수정했습니다.

#include <stdio.h> 

int main(void) 
{ 
    int count , sum , size; 

    count = 0; 

    sum = 0; 

    printf("Enter a value to find the sum of it from 1 : "); 

    while (scanf("%d" , &size) && count++ < size) 

      sum = sum + count; 

     printf("sum = %d\n" , sum); 

    return 0; 
} 

[질문 : 첫 번째 코드 만든 날 가정을 바탕으로

1.), 항상 그건 명 약관 하하게 사실로 평가되어야한다고 가정 scanf() 기능이 왜 두 번째 테스트 조건 count++ < sizewhile에있는 명령문이 실행되는지 여부를 판별하는 것입니다.

2.) 그러나 프로그램을 실행할 때 30을 입력했지만 작동하지 않습니다. 프로그램이 입력 한 후에 아무 것도하지 않고 멈 춥니 다.

3) 입력 연산자가 오른쪽 피연산자 인 동안 왼쪽 카운트로 '카운트 ++ <'을 사용하여 테스트 조건으로 전환하려고합니다.

4.) 이렇게하면 결과가 달라집니다. 프로그램을 실행하려고하면 프로그램이 두 번째 printf() 함수 문을 실행하고 sum = 0을 출력합니다.

귀하의 도움을 많이 주시고, 실수로 나를 바로 잡으십시오. 나는 그것을 배우고 싶습니다.

답변

8

나는이 코드가 테스트 조건이 함수 호출로 대체되었으므로 항상이 코드가 true (내 가정)로 평가 될 것이라고 생각합니다.

올바르지 않습니다. 함수 (이 경우 printf)는 값 (이 경우 int)을 반환합니다.if 문에서 조건으로 사용하면 함수가 호출되고 반환되는 값이 조건이됩니다. 0을 반환하면 false로 평가됩니다. 0이 아닌 값을 반환하면 true로 평가됩니다.

if (printf("Hello, World!")) { } 

int i; 
i = printf("Hello, World!"); 
if (i) { } 

사이에는 차이가 없다

(옆으로는 물론, 두 번째 실시 예에서의 추가 변수.)에서


수정 된있어서 두 번째 예에서는 루프 조건을 검사 할 때마다 scanf이 호출됩니다. 당신은 이런 식으로 루프를 다시 작성할 수 :

while (1) 
{ 
    int result_of_scanf; 

    result_of_scanf = scanf("%d", &size); 
    if (result_of_scanf == 0) 
     break; 

    if (count++ >= size) 
     break; 

    sum += count; 
} 

scanf 한 번만 호출되지 않습니다; 루프의 반복마다 호출됩니다. scanf은 성공적으로 읽은 요소의 수를 반환하므로이 경우 1 (유효한 정수를 입력하는 경우 int) 또는 0 (다른 입력을 제공하는 경우) 중 하나를 반환합니다.

+0

당신이 의미하는 바는 printf() 함수의 반환 값이 테스트 조건으로 사용됨을 의미합니다. – caramel1995

0

프로그램이 멈췄지만 실제로 숫자를 입력 할 것으로 예상됩니다. 즉, 숫자가 입력 숫자와 같아 질 때까지 숫자를 입력해야합니다.

관련 문제