Как получилось изменить bool на любой тип данных, код по-прежнему работает идеально? - PullRequest
1 голос
/ 09 мая 2020

Когда дано число n, программа проверяет цифры n по одной, сохраняя каждую в переменной digit, а затем используя ее в качестве индекса в digit_seen.

Если digit_seen[ digit ] ложно, тогда di git раньше не видел, поэтому программа устанавливает digit_seen[ digit ] в true и продолжает работу. Как объяснено в C программирование - Современный подход KN King :

Обратите внимание!

Изменение типа данных bool на любой тип данных (char, int, float ) по-прежнему дает правильные результаты. Как это не случай ???

/*
** Checks number for repeated digits
*/
#include <stdio.h>
#include <stdbool.h>

int main()
{
    int digit;  
    bool digit_seen[ 10 ] = { false };
    long n;

    printf( "Enter a number: " );
    scanf( "%ld", &n );

    while( n > 0 ){
        digit = n % 10;
        if( digit_seen[ digit ] )
            break;
        digit_seen[ digit ] = true;
        n /= 10;
    }

    if( n > 0 )
        printf( "Repeated digit\n" );
    else
        printf( "No repeated digit\n" );

    return ( 0 );
}

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

В C, условия (в циклах while / for, if, et c ...) просто проверяют, оценивается ли выражение как нечто, не равное 0.

Итак:

if (a)

То же, что:

if (a != 0)

Логические значения в C просто определены как тип, который может принимать одно из двух значений: true (1) и false (0).

Операторы >, <, >=, <=, ==, !=, &&, || и ! - все операторы, которые приводят к 1 или 0.

2 голосов
/ 09 мая 2020

Если вы проверите <stdbool.h> библиотеку, вы найдете:

#define false 0
#define true  1

Любой примитивный тип может содержать эти два значения.

...