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.
Vous pouvez utiliser l'opérateur conditionnel (ou ternaire) de C:
(a > b) ? "True" : "False";
ou peut-être dans votre cas:
x ? "True" : "False" ;
Version alternative sans branche:
"false\0true"+6*x
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.
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.