Meilleure façon d'imprimer le résultat d'un bool comme "faux" ou "vrai" en c?
Je dois écrire un programme principal qui appelle d'autres fonctions que de tester une série de nombre, s'ils sont moins que d'un nombre, si tous les de la série " les numéros sont compris entre deux limites, et si tout est négatif. Mon code renvoie les valeurs de 1 pour vrai et 0 pour faux, mais la consigne demande qu'ils soient imprimés en tant que "vrai" ou "faux". Je ne suis pas sûr de la façon d'obtenir le bool réponses à imprimer sous la forme d'une chaîne de printf. J'ai utilisé si (atl == false) printf("false"); dans mon at_least.c et dans la principale.c, mais il ne renvoie qu'une longue chaîne de vrai ou faux (ex: truetruetrue....). Je ne suis pas sûr si c'est le bon codage et je suis en train de mettre dans le mauvais endroit ou il y avait un autre code que j'ai besoin d'utiliser.
C'est ma principale.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, je n'arrive pas à trouver beaucoup sur.
Merci d'avance pour votre aide!
ADDENDUM:
Cette opération est répétée à partir d'une réponse ci-dessous.
Il a travaillé pour le at_least et négatifs des fonctions, mais pas pour la entre la fonction. J'ai
void between(int x, bool* bet)
{
if (x >= LOWER && x <= UPPER)
*bet = false;
return;
}
que mon code. Je ne suis pas sûr de ce qui est mauvais.
x == true
est redondante dans une expression Booléenne; vous pouvez simplement dire x
. De même, x == false
est juste !x
.OriginalL'auteur Piseagan | 2011-10-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser C conditionnelle (ou ternaire) opérateur :
ou peut-être dans votre cas:
void between(int x, bool* bet) { if (x >= LOWER && x <= UPPER) *bet = false; return; }
que mon code. Je ne suis pas sûr de ce qui est mauvais.OriginalL'auteur Mitch Wheat
Alternent sans branches version:
Une fonction inline ou de la macro avec un auto-documentation du nom (par exemple
bool2str
) permettrait de résoudre ce problème.Oui, je ne voulais pas dire pour qu'elle soit copiée mot pour mot à une macro. Il y a quelques changements que vous auriez besoin de faire comme les parenthèses et l'effondrement de la valeur de 0/1.
("false\0true"+6*!!(x))
est probablement la façon la plus propre.Qu'est-ce réellement le faire? Pourriez-vous fournir un petit détail pour ceux d'entre nous d'apprentissage c qui trébuchent sur cette réponse?
L'expression
"false\0true"
fait évalue à unconst char*
pointant vers cette chaîne de caractères dans la mémoire du programme.+6*x
ajoute 6 pour que le pointeur s'x
1 (vrai) et 0 six
est 0 (false). Si 0 est ajouté à l'aide du pointeur,printf
va commencer à lire à l' 'f
"et arrêter de lire quand il atteint le'\0
" (le caractère de fin null). Si, au lieu de 6 est ajouté,printf
va commencer à lire à l' 't
" et arrêter de lire quand la chaîne se termine naturellement. La construction sera toutefois échouer six
n'est pas 0 ou 1, si vous avez besoin @R le corriger si vous ne pouvez pas garantir que c'est.OriginalL'auteur R..
x ? "true" : "false"
L'expression ci-dessus renvoie une
char *
, donc vous pouvez l'utiliser comme ceci:puts(x ? "true" : "false");
ou
printf(" ... %s ... ", x ? "true" : "false");
Vous pouvez faire une macro pour cela.
const char*
, pas unchar*
(bien qu'il est déconseillé de conversion à partir de la première à la seconde), mais c'est hors de propos ici.Il n'y a aucun point dans la création d'une macro lorsqu'une fonction inline peuvent faire le travail.
Non, c'est
char *
. C'est C pas du C++.OriginalL'auteur Oscar Korz
Alors que dire de celui-ci:
Cette affiche de la manière suivante:
L'utilisation de ce type bool, mais de l'int doit fonctionner de la même manière.
printf
appel à la macro. Bien que, à cause de la façon dont l'opérateur virgule fonctionne, vous pouvez utiliser des parenthèses pour faire des trucs commeputs((BOOL_FMT(1)))
pour imprimertrue
.OriginalL'auteur alk