Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1452 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Pb de débutant, insérer des valeurs dans un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Pb de débutant, insérer des valeurs dans un tableau

n°2411480
Jaxom31
It goes to eleven !
Posté le 07-03-2022 à 09:44:45  profilanswer
 

Bonjour, je dois lire une série de valeurs (de 1 à 50), les ranger dans un tableau et en faire l'addition (pour plus tard calculer la moyenne).
 
Je ne comprends pas pourquoi mon programme ne fonctionne pas
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int nbValeur=51;
  6. while ((nbValeur<0) || (nbValeur >50)) {
  7.  printf("Combien de valeurs allez-vous saisir ? :" );
  8.  scanf("%i", &nbValeur);
  9. }
  10.     double tab[nbValeur];
  11.     double somme=0.0;
  12.     double valeur=0.0;
  13.    
  14.     for (int i=0; i< nbValeur ; i++){
  15.         tab[i]=1;
  16. //     printf("\nSaisissez la valeur %i / %i ? : ",i+1,nbValeur);
  17.  scanf("%s", &valeur);
  18.         tab[i]=valeur;
  19.         somme=somme+tab[i];
  20. //        printf("%d",valeur);
  21.     }
  22.     for (int i=0; i<nbValeur ; i++){
  23.         printf("%d",tab[i]);
  24.     }
  25.     printf("\nLa somme = %d", somme );
  26. }

Message cité 1 fois
Message édité par Jaxom31 le 07-03-2022 à 10:26:34

---------------
0 118 999 881 999 119 725 ...... 3 -
mood
Publicité
Posté le 07-03-2022 à 09:44:45  profilanswer
 

n°2411484
Fantome Pe​rsecuteur
Pseudo ridicule
Posté le 07-03-2022 à 10:04:06  profilanswer
 

Premier conseil pour t'apprendre à debugger : mets des printf un peu partout dans ton code avec les valeurs intermédiaires pour voir par où tu passes et qu'est-ce qui se trame dans tes variables et dans ta boucle, ça t'aidera à cible le problème :)


---------------
c cui ki di ki é
n°2411486
jay31790
Posté le 07-03-2022 à 10:12:58  profilanswer
 

Tu dis que ça ne fonctionne pas mais quelle(s) sortis(s) as-tu ?
Des messages d'erreurs ?


---------------
Achats/Ventes
n°2411487
XaTriX
Posté le 07-03-2022 à 10:16:52  profilanswer
 

Bonsoir


---------------
"Xat le punk à chien facho raciste. C'est complexe comme personnage." caudacien 05/10/2020
n°2411490
jay31790
Posté le 07-03-2022 à 10:20:02  profilanswer
 

tu enregistres ta saisie en tant que String que tu stockes dans un tableau de double. La transformation n'est sans doute pas automatique
(après, mon C est peut-être rouillé)


---------------
Achats/Ventes
n°2411491
Jaxom31
It goes to eleven !
Posté le 07-03-2022 à 10:22:19  profilanswer
 

Jaxom31 a écrit :

Bonjour, je dois lire une série de valeurs (de 1 à 50), les ranger dans un tableau et en faire l'addition (pour plus tard calculer la moyenne).
 
Je ne comprends pas pourquoi mon programme ne fonctionne pas
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int nbValeur=51;
  6. while ((nbValeur<0) || (nbValeur >50)) {
  7.  printf("Combien de valeurs allez-vous saisir ? :" );
  8.  scanf("%i", &nbValeur);
  9. }
  10.     double tab[nbValeur];
  11.     double somme=0.0;
  12.     double valeur=0.0;
  13.    
  14.     for (int i=0; i< nbValeur ; i++){
  15.         tab[i]=1;
  16. //     printf("\nSaisissez la valeur %i / %i ? : ",i+1,nbValeur);
  17.  scanf("%s", &valeur);
  18.         tab[i]=valeur;
  19.         somme=somme+tab[i];
  20. //        printf("%d",valeur);
  21.     }
  22.     for (int i=0; i<nbValeur ; i++){
  23.         printf("%d",tab[i]);
  24.     }
  25.     printf("\nLa somme = %d", somme );
  26. }



 

Fantome Persecuteur a écrit :

Premier conseil pour t'apprendre à debugger : mets des printf un peu partout dans ton code avec les valeurs intermédiaires pour voir par où tu passes et qu'est-ce qui se trame dans tes variables et dans ta boucle, ça t'aidera à cible le problème :)


Oui, quand on comprend la syntaxe du printf  :o  
 

jay31790 a écrit :

Tu dis que ça ne fonctionne pas mais quelle(s) sortis(s) as-tu ?
Des messages d'erreurs ?


Les valeurs affichées sont fausses !
 


Pas encore couché ?  :o  
 
 
C'est bon, en fait mon programme fonctionnait bien, ce sont mes printf qui merdaient avec printf("%lf", valeur); ça marche mieux.
 
edit : et des scanf("%lf", &valeur); (merci Jay)


Message édité par Jaxom31 le 07-03-2022 à 10:25:42

---------------
0 118 999 881 999 119 725 ...... 3 -
n°2411492
Jaxom31
It goes to eleven !
Posté le 07-03-2022 à 10:23:46  profilanswer
 

jay31790 a écrit :

tu enregistres ta saisie en tant que String que tu stockes dans un tableau de double. La transformation n'est sans doute pas automatique
(après, mon C est peut-être rouillé)


Oui, merci, j'avais testé un peu tout, je pensais que mes scanf n'était pas correct.


---------------
0 118 999 881 999 119 725 ...... 3 -
n°2411740
gilou
Modérateur
Modzilla
Posté le 09-03-2022 à 00:00:26  profilanswer
 

Jaxom,
 
Deux petites choses :
int nbValeur=51;
while ((nbValeur<0) || (nbValeur >50)) {
 printf("Combien de valeurs allez-vous saisir ? :" );
 scanf("%i", &nbValeur);
}
 
c'est moins logique que :
int nbValeur;
do {
 printf("Combien de valeurs allez-vous saisir ? :" );
 scanf("%i", &nbValeur);
} while ((nbValeur<0) || (nbValeur >50));
 
Et d'autre part, pour ce genre de programme, de nos jours, c'est bien plus pratique et plus simple d'écrire ça en C++ (qui par exemple, a des conteneurs dynamiques, qui ne t'obligent pas a faire des hypothèses sur le nb de valeurs à saisir).
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2411835
rat de com​bat
attention rongeur méchant!
Posté le 09-03-2022 à 16:24:43  profilanswer
 

gilou a écrit :

Et d'autre part, pour ce genre de programme, de nos jours, c'est bien plus pratique et plus simple d'écrire ça en C++ (qui par exemple, a des conteneurs dynamiques, qui ne t'obligent pas a faire des hypothèses sur le nb de valeurs à saisir).

Ca c'est une discussion qui peut durer une éternité probablement. Certes, le C++ c'est plus puissant mais aussi beaucoup plus complexe. Perso je dirais quelque bases en C ne font pas de mal, surtout si on veut ensuite partir sur des µC.
 
Et pour les conteneurs dynamiques, il y a toujours malloc() et realloc(). :o :o

n°2411851
gilou
Modérateur
Modzilla
Posté le 09-03-2022 à 23:26:04  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <sstream>
  5. #include <iterator>
  6. #include <numeric>
  7. int main()
  8. {
  9.   std::vector<double> values;
  10.   std::string line;
  11.  
  12.   std::cout << "Veuillez entrer des nombres (un ou plusieurs par ligna)" << std::endl
  13.             << "les nombres incorrects seront sautés" << std::endl
  14.             << "Terminez par une ligne vide." << std::endl << std::flush;
  15.    
  16.   while (true) {
  17.     std::getline(std::cin, line);
  18.     if (!line.empty()) {
  19.       std::istringstream myStream( line );
  20.       std::istream_iterator<std::string> it;
  21.       for (it = std::istream_iterator<std::string>(myStream); it != std::istream_iterator<std::string>(); ++it)
  22.         try { values.push_back(std::stod(*it)); } catch(...) {}
  23.     }
  24.     else break;
  25.   }
  26.   std::cout << "La somme vaut : " << std::accumulate(values.begin(), values.end(), 0.0) << std::endl;
  27. }


Pour ce type d'exercice, on peut faire du C++ sans utiliser de manière explicite les classes, juste avec une bonne utilisation des conteneurs.
Et ça te fait du code bien plus robuste que le code C (grosso modo, le seul truc que j'ai pas géré, c'est si la somme accumulée dépasse les bornes d'un double).
Mais ça accepte autant d'entrée que la mémoire de ta machine veut bien, ça saute tout ce qui est invalide sans broncher...
 
A+,


Message édité par gilou le 09-03-2022 à 23:28:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 09-03-2022 à 23:26:04  profilanswer
 

n°2412294
Jaxom31
It goes to eleven !
Posté le 15-03-2022 à 09:54:33  profilanswer
 

gilou a écrit :

Jaxom,

 

Deux petites choses :
int nbValeur=51;
while ((nbValeur<0) || (nbValeur >50)) {
 printf("Combien de valeurs allez-vous saisir ? :" );
 scanf("%i", &nbValeur);
}

 

c'est moins logique que :
int nbValeur;
do {
 printf("Combien de valeurs allez-vous saisir ? :" );
 scanf("%i", &nbValeur);
} while ((nbValeur<0) || (nbValeur >50));

 

Et d'autre part, pour ce genre de programme, de nos jours, c'est bien plus pratique et plus simple d'écrire ça en C++ (qui par exemple, a des conteneurs dynamiques, qui ne t'obligent pas a faire des hypothèses sur le nb de valeurs à saisir).

 

A+,

 

Désolé, je n'avais pas vu les réponses, le c est imposé. effectivement le do...while est plus logique, merci. Je n'ai pas l'habitude de cette boucle.

 


Message édité par Jaxom31 le 15-03-2022 à 09:55:42

---------------
0 118 999 881 999 119 725 ...... 3 -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Pb de débutant, insérer des valeurs dans un tableau

 

Sujets relatifs
Configurer les colonnes d'un tableau dans l'ordreAide niveau programmation débutant
Pb lancement apache avec php8 pour uWampWordPress tableau à supprimer
Select where avec plusieurs valeurs[Powershell]Ajouter une valeur dans un tableau dans requête reccursive
[Résolu] Pb de regexp avec Mysql[Hébergement] PB certificat SSL
Débutant quoi apprendre ?[DEBUTANT] Quel langage pour utiliser automatiquement un site ?
Plus de sujets relatifs à : [Résolu] Pb de débutant, insérer des valeurs dans un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR