Вызов функции C как условие проверки - PullRequest
0 голосов
/ 04 мая 2011

Несколько дней назад мне пришла в голову странная идея, которая странным образом манипулирует оператором if();. Перейдем к простому коду.

Код:

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

Моя идея:

1.) Мне кажется, этот код всегда будет оцениваться как истинный (мое предположение), поскольку условие теста заменяется вызовом функции..

Итак, сегодня я выполняю упражнение, предоставленное книгой (просто, чтобы помочь мне обновить то, что я узнал несколько дней назад). Это код.

Код:

#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() предполагает, что она всегда оценивается как true. Вот почему второе условие теста count++ < size является тем, которое определяет, является ли оператор в *Оператор 1041 * будет выполнен или нет.

2.) Но когда я запускаю программу, я ввожу 30, но она не работает, программа просто останавливается, ничего не делая после того, как я нажму enter.

3.) Я пытаюсь переключиться в тестовое состояние с помощью `count ++

4.) После этого я получаю следующий результат:Разное. Когда я пытаюсь запустить программу, программа выполняет вторую printf() инструкцию функции и распечатывает sum = 0.

Ваша помощь очень ценится, исправьте меня за ошибки. Я готовучиться на этом.

Ответы [ 2 ]

9 голосов
/ 04 мая 2011

Мне кажется, этот код всегда будет оцениваться как истинный (мое предположение), поскольку условие теста заменяется вызовом функции.

Это неверно.Функция (в данном случае printf) возвращает значение (в данном случае int).Когда вы используете его в качестве условия в операторе if, вызывается функция, и возвращаемое значение становится условием: если оно возвращает ноль, оно оценивается как ложное;если он возвращает ненулевое значение, он оценивается как 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 голосов
/ 04 мая 2011

Программа застряла, но на самом деле она ожидает ввода цифр.То есть вам придется вводить цифры до тех пор, пока счетчик не станет равен введенному номеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...