web-dev-qa-db-fra.com

La meilleure façon d'imprimer le résultat d'un booléen comme «faux» ou «vrai» en c?

Je dois écrire un programme dans lequel main appelle d'autres fonctions qui testent une série de nombres s'il y en a moins d'un nombre, si tous les nombres de la série sont entre deux limites et s'il y en a sont négatifs. Mon code renvoie les valeurs de 1 pour vrai et de 0 pour faux, mais l'affectation demande qu'elles soient imprimées comme "vrai" ou "faux". Je ne sais pas comment obtenir les réponses booléennes à imprimer sous forme de chaîne à partir de printf. J'ai utilisé if (atl == false) printf ("false"); dans mon at_least.c et dans main.c, mais il ne renvoie qu'une longue chaîne de true ou false (ex: truetruetrue ....). Je ne sais pas si c'est le bon codage et je le mets au mauvais endroit ou il y avait un autre code que je dois utiliser.

C'est mon principal.c:

#include "my.h"

int main (void)

{
    int     x;
    int     count    = 0;
    int     sum      = 0;
    double  average  = 0.0;
    int     largest  = INT_MIN;
    int     smallest = INT_MAX;
    bool    atlst    = false;
    bool    bet      = true;
    bool    neg      = false;
    int     end;

    while ((end = scanf("%d",&x)) != EOF)
        {
            sumall(x, &sum);                           //calling function sumall
            count++;
            larger_smaller(x, &largest, &smallest);    //calling function larger_smaller
            if (atlst == false)
               at_least(x, &atlst);                    //calling function at_least if x < 50
            if (bet == true)
               between(x, &bet);                       //calling function between if x is between 30 and 40 (inclusive)
            if (neg == false)
               negative(x, &neg);                      //calling function negative if x < 0
        }
    average = (double) sum / count;         
    print(count, sum, average, largest, smallest, atlst, bet, neg);
    return;
 }

mes résultats pour un ensemble de nombres:

The number of integers is:           15
The sum is               :         3844
The average is           :       256.27
The largest is           :          987
The smallest is          :          -28
At least one is <  50    :            1     //This needs to be true
All between  30 and  40  :            0     //This needs to be false
At least one is negative :            1     //This needs to be true

C'est en C, sur lequel je n'arrive pas à trouver grand-chose.

Merci d'avance pour votre aide!

ADDENDA:

Ceci est répété à partir d'une réponse ci-dessous.

Cela a fonctionné pour les fonctions at_least et négative, mais pas pour la fonction entre. j'ai

void between(int x, bool* bet) 
  { 
    if (x >= LOWER && x <= UPPER) 
        *bet = false; 
    return; 
  }

comme mon code. Je ne sais pas ce qui ne va pas.

16
Piseagan

Vous pouvez utiliser l'opérateur conditionnel (ou ternaire) de C:

  (a > b) ? "True" : "False";

ou peut-être dans votre cas:

  x ? "True" : "False" ;
23
Mitch Wheat

Version alternative sans branche:

"false\0true"+6*x
45
R..

x ? "true" : "false"

L'expression ci-dessus renvoie un char *, Vous pouvez donc utiliser comme ceci:

puts(x ? "true" : "false"); ou printf(" ... %s ... ", x ? "true" : "false");

Vous voudrez peut-être faire une macro pour cela.

15
Oscar Korz

Alors qu'en est-il de celui-ci:

#include <stdio.h>

#define BOOL_FMT(bool_expr) "%s=%s\n", #bool_expr, (bool_expr) ? "true" : "false"

int main(int iArgC, char ** ppszArgV)
{
    int x = 0;
    printf(BOOL_FMT(x));

    int y = 1;
    printf(BOOL_FMT(y));

    return 0;
}

Cela imprime les éléments suivants:

x=false
y=true

L'utiliser avec le type bool mais int devrait fonctionner de la même manière.

3
alk