Programme moyenne [Résolu]

Signaler
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
-
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
-
Bonjour, je souhaite votre aide pour un programme que j'ai écris ! Je précise que je suis étudiant, que c'est un exercice qui n'a pas de correction mais je voudrais savoir surtout pour moi, j'espère que vous comprendrez :

// -- bibliothèques nécessaires --
#include <stdio.h>
#include <conio.h>

// -- programme principal --
int main () {
 
 // déclarations
 float note = 0 ;
 float cumul = 0 ;
 float nbre ;
 const char * rep = "O" ;
 
 
 // saisie de la moyenne
 while(rep = "O") {
  printf(" Entrer une note = ") ;
  scanf("%f",¬e) ;
  cumul += note ;
  nbre++ ;
  printf(" Voulez-vous continuer ? (O/N)") ;
  scanf("%s",&rep) ;
 }
 printf(" Afficher cumul/nb ") ;
 
 getch () ;
 return 0 ;
}


je précise la dessus que e n'ai pas d'erreur mais 2 warning : Un qui dit (format '%s' expects type 'char*', but argument 2 has type 'const char**' ), et l'autre qui me dit : suggest parentheses around assignment used as truth value

2 réponses

Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
121
Bonjour.

Tu as plusieurs soucis:
  • Tu assignes une variable au lieu de la comparer => while(rep = "O") devrait être while(rep == "O")
  • La variable est de toute façon constante, donc non modifiable, ce qui n'a pas de sens, vu que tu veux vraiment la modifier.
  • En C, un char* n'est pas une chaîne de caractères automatique mais un pointeur. Donc soit tu crées une chaine préallouée, du style "char rep[32]", soit tu alloues de la mémoire avec malloc (mais si tu débutes, c'est un peu tôt pour en parler). Dans ton cas, vu que tu n'as besoin que d'une seule lettre, un simple "char rep" suffit largement.
  • On préfère généralement les "double" aux "float", pour des raisons de précisions (les "float" sont peu précis).
  • Lors d'un scanf, celui-ci à tendance à manger le buffer des saisies précédentes. Il faut donc nettoyer le buffer. Je ne vais pas rentrer dans le détail. Généralement on crée une fonction "clear", qu'on prend le soin d'appeler avant un scanf, pour éviter cela.


Voici une correction propre de ton code:
#include <stdio.h>

void clear(void)
{
  while (getchar() != '\n')
    ;
}

int main()
{
  double note = 0;
  double cumul = 0;
  double nb = 0;
  char rep = 'o';

  while (rep != 'N' && rep != 'n')
  {
    printf("Entrez une note: ");
    scanf("%lf", ¬e);
    cumul += note;
    nb++;
    printf("Voulez-vous continuer ? (O/N): ");
    clear();
    scanf("%c", &rep);
  }
  printf("Cumul/nb, %f/%f => %f\n", cumul, nb, cumul / nb);

  return 0;
}



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
1
Vraiment merci alors, j'espère que tu restera dans le coin car je risque d'avoir besoin de toi souvent :)