Petit exercice 2
Résolu/Fermé
ninrin
Messages postés
9
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
16 mai 2018
-
15 mai 2018 à 02:11
ninrin Messages postés 9 Date d'inscription jeudi 3 mai 2018 Statut Membre Dernière intervention 16 mai 2018 - 16 mai 2018 à 19:17
ninrin Messages postés 9 Date d'inscription jeudi 3 mai 2018 Statut Membre Dernière intervention 16 mai 2018 - 16 mai 2018 à 19:17
A voir également:
- Petit exercice 2
- Petit 1 comme ² ✓ - Forum Windows
- 2 ecran pc - Guide
- Excel trier du plus grand au plus petit - Guide
- Word numéro de page 1/2 - Guide
- Gto saison 2 - Forum Cinéma / Télé
4 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
15 mai 2018 à 03:08
15 mai 2018 à 03:08
Bonjour,
Pour avoir le type
Pour avoir le type
bool, il faut ajouter au début
#include <stdbool.h>
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 15 mai 2018 à 09:57
Modifié le 15 mai 2018 à 09:57
Salut ninrin,
En ajoutant le #include <stdbool.h> donnant accès au type bool, et en compilant avec les warnings avec gcc, on obtient ces messages d'avertissements et d'erreurs :
Codeblocks, que tu indiquais utiliser dans ton précédent message, a dû te les signaler. Traite les un par un en commençant par le premier : comprend pourquoi il se manifeste, corrige le, recompile, passe au suivant qui se manifestera en premier.
Les "error" vont empêcher la compilation car ils n'ont pas de sens syntaxiquement en C.
Les "warning" n'empêcheront pas la compilation, mais avertissent d'un code anormal, et dans 90% des cas, c'est un bogue.
Élimine les tous jusqu'à ce que ton programme compile proprement sans erreurs ni avertissements. Tous les bogues ne seront pas détectés par le compilateur, mais tu auras déjà bien progressé.
Quelques rappels ou indications :
Pour affecter une chaîne C à un tableau de char, tu dois utiliser strcpy() ou strncpy(), comme je te l'avais indiqué.
Pour comparer deux chaînes en C, tu dois utiliser strcmp()
Ces dernières fonctions sont accessibles par
Si tu ne connais pas le fonctionnement de ces fonctions, lis leur documentation.
Les liens que je te fournis vers http://www.cplusplus.com/reference/clibrary/ décrivent très précisément la syntaxe et l'usage des fonctions et comportent des exemples de code.
Il y a d'autres sites : https://en.cppreference.com/w/c/header ; les pages de manuel Linux ; ton manuel ; ton cours,... apprend à te servir de ces ressources pour progresser.
Si tu es bloqué sur une erreur ou un avertissement ou l'usage d'une fonction, reposte ton code corrigé et demande de l'aide sur le forum :-)
Dal
En ajoutant le #include <stdbool.h> donnant accès au type bool, et en compilant avec les warnings avec gcc, on obtient ces messages d'avertissements et d'erreurs :
$ gcc -Wall 35364348.c
35364348.c: In function ‘main’:
35364348.c:9:2: warning: too many arguments for format [-Wformat-extra-args]
scanf("&d", age);
^
35364348.c:22:9: error: assignment to expression with array type
situ = "rouge";
^
35364348.c:26:9: error: assignment to expression with array type
situ = "refusé";
^
35364348.c:29:2: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type]
return;
^
35364348.c:31:2: error: ‘else’ without a previous ‘if’
else if (((!C1) && C2) || (C1 && (!C2)))
^
35364348.c:34:9: error: assignment to expression with array type
situ = "orange";
^
35364348.c:38:9: error: assignment to expression with array type
situ = "rouge";
^
35364348.c:42:9: error: assignment to expression with array type
situ = "refusé";
^
35364348.c:46:2: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type]
return;
^
35364348.c:48:2: error: ‘else’ without a previous ‘if’
else if (acc == 0)
^
35364348.c:50:8: error: assignment to expression with array type
situ = "vert";
^
35364348.c:52:3: error: expected ‘}’ before ‘else’
else if (acc == 1)
^
35364348.c:54:9: error: assignment to expression with array type
situ = "orange";
^
35364348.c:58:9: error: assignment to expression with array type
situ = "rouge";
^
35364348.c:61:10: error: assignment to expression with array type
{ situ = "refusé";
^
35364348.c:18:7: warning: unused variable ‘C3’ [-Wunused-variable]
bool C3 = assur > 1;
^
35364348.c:7:7: warning: variable ‘situ’ set but not used [-Wunused-but-set-variable]
char situ[10];
^
35364348.c: At top level:
35364348.c:66:2: error: expected identifier or ‘(’ before ‘return’
return;
^
35364348.c:68:2: error: expected identifier or ‘(’ before ‘if’
if (C3)
^
35364348.c:85:2: error: expected identifier or ‘(’ before ‘return’
return;
^
35364348.c:87:10: error: expected declaration specifiers or ‘...’ before string constant
prinft ("votre situation: %s\n", situ);
^
35364348.c:87:35: error: unknown type name ‘situ’
prinft ("votre situation: %s\n", situ);
^
35364348.c:91:2: error: expected identifier or ‘(’ before ‘return’
return 0;
^
35364348.c:92:1: error: expected identifier or ‘(’ before ‘}’ token
}
^
Codeblocks, que tu indiquais utiliser dans ton précédent message, a dû te les signaler. Traite les un par un en commençant par le premier : comprend pourquoi il se manifeste, corrige le, recompile, passe au suivant qui se manifestera en premier.
Les "error" vont empêcher la compilation car ils n'ont pas de sens syntaxiquement en C.
Les "warning" n'empêcheront pas la compilation, mais avertissent d'un code anormal, et dans 90% des cas, c'est un bogue.
Élimine les tous jusqu'à ce que ton programme compile proprement sans erreurs ni avertissements. Tous les bogues ne seront pas détectés par le compilateur, mais tu auras déjà bien progressé.
Quelques rappels ou indications :
Pour affecter une chaîne C à un tableau de char, tu dois utiliser strcpy() ou strncpy(), comme je te l'avais indiqué.
Pour comparer deux chaînes en C, tu dois utiliser strcmp()
Ces dernières fonctions sont accessibles par
#include <string.h>
Si tu ne connais pas le fonctionnement de ces fonctions, lis leur documentation.
Les liens que je te fournis vers http://www.cplusplus.com/reference/clibrary/ décrivent très précisément la syntaxe et l'usage des fonctions et comportent des exemples de code.
Il y a d'autres sites : https://en.cppreference.com/w/c/header ; les pages de manuel Linux ; ton manuel ; ton cours,... apprend à te servir de ces ressources pour progresser.
Si tu es bloqué sur une erreur ou un avertissement ou l'usage d'une fonction, reposte ton code corrigé et demande de l'aide sur le forum :-)
Dal
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
15 mai 2018 à 09:54
15 mai 2018 à 09:54
Autre conseil : lorsque tu programmes, n'attends pas d'avoir écrit une centaine de lignes de code pour vérifier que ton programme compile proprement sans erreurs ni warnings et qu'il s'exécute comme tu l'attends.
Dès que tu as quelques lignes testables, compile et débogue en vérifiant que cela fonctionne comme cela le devrait.
Dès que tu as quelques lignes testables, compile et débogue en vérifiant que cela fonctionne comme cela le devrait.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 15 mai 2018 à 13:43
Modifié le 15 mai 2018 à 13:43
Tes
Si tu cherches juste à terminer le bloc
Cela provoque d'autres erreurs aux lignes qui suivent ces
returnplacés au milieu du code de
main()ne sont pas syntaxiquement incorrects en eux-mêmes (tu as seulement droit à un avertissement car tu ne renvoies pas un
intattendu par
main()), mais leur effet est d'interrompre l'exécution de la fonction (et donc de terminer le programme à cet endroit puisqu'il s'agit de la fonction
main()). Ce n'est certainement pas ce que tu cherches à faire (sauf pour le dernier
return 0).
Si tu cherches juste à terminer le bloc
if, c'est déjà le rôle de l'accolade fermante et tu dois supprimer ces
return(sauf, donc, le dernier
return 0).
Cela provoque d'autres erreurs aux lignes qui suivent ces
return, qui comportent des
else:
error: ‘else’ without a previous ‘if’car tu as interrompu la séquence if / else. Ces messages d'erreurs disparaîtront lorsque tu auras supprimé ces
return.
Pinzou76
Messages postés
614
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
191
15 mai 2018 à 10:00
15 mai 2018 à 10:00
Petite erreur d'étourderie sur le premier scanf:
devient
Pourtant tu as bien syntaxé les autres
scanf("&d", age);
devient
scanf("%d", &age);
Pourtant tu as bien syntaxé les autres
ninrin
Messages postés
9
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
16 mai 2018
16 mai 2018 à 19:17
16 mai 2018 à 19:17
Parfait j'ai réussis! merci à tous, je me rend compte que les cours de la cned sont légèrement dépassé xD. En tout cas je sens que je vais adorée :). Je vais faire un post post sur un exo de tableau cette fois ci, qui me pose quelque problème