Programme moyenne [Résolu]

TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention - 16 sept. 2015 à 16:58 - Dernière réponse : TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention
- 16 sept. 2015 à 21:34
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
Afficher la suite 

2 réponses

Répondre au sujet
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 18 avril 2018 Dernière intervention - Modifié par cptpingu le 16/09/2015 à 18:03
0
Utile
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
Commenter la réponse de cptpingu
TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention - 16 sept. 2015 à 21:34
0
Utile
Vraiment merci alors, j'espère que tu restera dans le coin car je risque d'avoir besoin de toi souvent :)
Commenter la réponse de TheRogerFederer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.