true - ¿La mejor manera de imprimir el resultado de un bool como ''falso'' o ''verdadero'' en c?
tipo bool c++ (4)
Entonces, ¿qué pasa con este:
#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;
}
Esto imprime lo siguiente:
x=false
y=true
Usando esto con el tipo bool pero int debería funcionar de la misma manera.
Tengo que escribir un programa en el cual las llamadas principales a otras funciones que prueban una serie de números si alguna es menor que una, si todas las series están entre dos límites, y si alguna es negativa. Mi código devuelve los valores de 1 para verdadero y 0 para falso, pero la asignación solicita que se impriman como ''verdadero'' o ''falso''. No estoy seguro de cómo hacer que las respuestas bool se impriman como una cadena de printf. Utilicé if (atl == false) printf ("false"); en mi at_least.c y en main.c, pero solo devuelve una cadena larga de verdadero o falso (por ejemplo, truetruetrue ....). No estoy seguro si esa es la codificación correcta y la estoy colocando en el lugar equivocado o si hay algún otro código que necesito usar.
Este es mi main.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;
}
Mis resultados para un conjunto de números:
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
Esto está en C, que parece que no puedo encontrar mucho en.
¡Gracias de antemano por tu ayuda!
APÉNDICE:
Esto se repite a partir de una respuesta a continuación.
Esto funcionó para las funciones at_least y negative, pero no para la función between. yo tengo
void between(int x, bool* bet)
{
if (x >= LOWER && x <= UPPER)
*bet = false;
return;
}
como mi codigo No estoy seguro de lo que está mal.
Podría usar el operador condicional (o ternario) de C:
(a > b) ? "True" : "False";
O quizás en tu caso:
x ? "True" : "False" ;
Versión sin sucursales alternativa:
"false/0true"+6*x
x ? "true" : "false"
La expresión anterior devuelve un char *
, por lo que puede usar así:
puts(x ? "true" : "false");
o printf(" ... %s ... ", x ? "true" : "false");
Es posible que desee hacer una macro para esto.