Salut je galere sur un programe tout con xD help codeblock

Fermé
programeurDuDimanche Messages postés 25 Date d'inscription jeudi 22 janvier 2015 Statut Membre Dernière intervention 27 janvier 2015 - Modifié par Whismeril le 22/01/2015 à 06:57
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 janv. 2015 à 16:19
salut,je commence a programmer cetait ma premiere fois et j'ai une seule erreur sa m'énerve regardez :
d'apres le logitiel je me suis foiré a la ligne en gras! MErci
# <stdio.h>
#include <stdlib.h>

int main()
(
<bold>int resultat = 0, nombre1 = 0, nombre2 = 0, nombre3 = 0;</bold>
printf("tu a la chance de tester ma calculatrice ! \n\n");
printf("entre le nombre1\n\n");
scanf ("%d",&nombre1);
printf("entre le nombre2 si tu l'ose !\n\n");
scnaf("%d",&nombre2);
printif("et le dernier!\n\n");
scnaf("%d",&nombre3);
resultat = nombre1 +nombre2 +nombre3;
printf("%d + %d + %d = %d\n\n",nombre1 + nombre2 +nombre3 = resultat);
    return 0;
)


EDIT: Ajout de la coloration syntaxique.
A voir également:

5 réponses

Zephirr Messages postés 317 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 6 novembre 2015 100
22 janv. 2015 à 06:51
Il faut mettre des {} au début et a la fin de ta fonction en non des ().
0
programeurDuDimanche Messages postés 25 Date d'inscription jeudi 22 janvier 2015 Statut Membre Dernière intervention 27 janvier 2015 2
22 janv. 2015 à 09:24
Cool Merci!
0
programeurDuDimanche Messages postés 25 Date d'inscription jeudi 22 janvier 2015 Statut Membre Dernière intervention 27 janvier 2015 2
22 janv. 2015 à 09:54
rE, Mince code block ma pas die toute les érreurs je remet ma compilation :
Merci d'avence.

#include <stdio.h>
#include <stdlib.h>


int main()
{
int resultat = 0, nombre1 = 0, nombre2 = 0, nombre3 = 0;
printf("tu a la chance de tester ma calculatrice ! \n\n");
printf("entre le nombre1\n\n");
scanf ("%d", &nombre1);
printf("entre le nombre2 si tu l'ose !\n\n");
scnaf("%d", &nombre2);
printif("et le dernier!\n\n");
scnaf("%d",&nombre3);
resultat = nombre1 +nombre2 +nombre3;
printf ("%d + %d + %d = %d\n\n",nombre1, nombre2 ,nombre3 ,resultat);
return 0;
}
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
22 janv. 2015 à 10:32
$ gcc -Wall progdudim.c
progdudim.c: In function `main':
progdudim.c:12:2: warning: implicit declaration of function `scnaf' [-Wimplicit-function-declaration]
progdudim.c:13:2: warning: implicit declaration of function `printif' [-Wimplicit-function-declaration]
/tmp/cc8zGRHv.o: In function `main':
progdudim.c:(.text+0x72): undefined reference to `scnaf'
progdudim.c:(.text+0x7e): undefined reference to `printif'
progdudim.c:(.text+0x92): undefined reference to `scnaf'
collect2: error: ld returned 1 exit status


Les messages d'erreur sont pourtant clairs

c'est scanf et non scnaf
c'est printf et non printif


Dal
0
programeurDuDimanche Messages postés 25 Date d'inscription jeudi 22 janvier 2015 Statut Membre Dernière intervention 27 janvier 2015 2
22 janv. 2015 à 10:39
je suis une Merde sinon merci!
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 22/01/2015 à 11:50
Non, il faut juste apprendre à interpréter les messages d'avertissement et d'erreur provenant des différentes phases de la construction de l'exécutable, cela aide à la compréhension.

$ gcc -Wall progdudim.c

Là j'ai lancé le compilateur gcc en ligne de commande avec l'option -Wall qui affiche des "warnings". Sous Codeblocks, je suppose que tu utilises aussi gcc (si tu as installé la version de Codeblocks avec MinGW sous Windows).

Vérifie que ton projet est paramétré pour signaler tous les warnings (Project - Build options - Clique sur la racine du projet - onglet Compiler settings - Compiler flags - coche "Enable all compiler warnings [-Wall]".

En principe, les projets sont paramétrés par défaut par Codeblocks avec -Wall (qui signifie "Warnings: all").

Le compilateur peut donc afficher des erreurs ou des avertissements. L'erreur qui s'affichait en premier lorsque tu as posté ton message d'origine (celle concernant l'absence d'accolades) était une erreur de syntaxe.

Voyons la suite.

Le compilateur tente de compiler le programme progdudim.c :

progdudim.c: In function `main':
progdudim.c:12:2: warning: implicit declaration of function `scnaf' [-Wimplicit-function-declaration]
progdudim.c:13:2: warning: implicit declaration of function `printif' [-Wimplicit-function-declaration]
/tmp/cc8zGRHv.o: In function `main':


Le compilateur rapporte des avertissements et non des erreurs à ce stade, car la déclaration implicite de fonctions est permise dans le standard C89. Le compilateur ne sais pas où la fonction "scnaf" est définie (ni "printif"), mais espère qu'il pourra savoir quoi en faire plus tard. Lorsque ces déclarations implicites sont faites le compilateur considère que la fonction retourne un int et que ses arguments peuvent être n'importe quels arguments.

A ce stade, la compilation de progdudim.c est terminée, mais l'exécutable n'est pas encore créé, seul le fichier objet (un .o) a été créé.

La création de l'exécutable suppose de lier les fichiers objets créés (entre eux s'il y a en plusieurs et) avec la bibliothèque standard et les bibliothèques externes éventuellement utilisées. Cela est fait par l'éditeur de liaison.

A ce stade, l'éditeur de liaison est incapable de trouver où sont effectivement définies les fonctions "scnaf" et "printif" et il retourne une erreur "undefined reference".

progdudim.c:(.text+0x72): undefined reference to `scnaf'
progdudim.c:(.text+0x7e): undefined reference to `printif'
progdudim.c:(.text+0x92): undefined reference to `scnaf'
collect2: error: ld returned 1 exit status


En ligne de commande, on voit d'ailleurs que l'erreur n'est pas renvoyée par gcc, mais par ld (le linker du projet GNU).

A partir du standard C99, la déclaration implicite de fonctions n'est plus admise, et est considérée comme une erreur.

gcc va compiler en C89 par défaut (en fait pas seulement, car gcc introduit aussi des extensions GNU au C), il faut préciser -std=c99 pour compiler en C99, mais pour réellement faire en sorte que ce type d'erreurs bloquent dès le stade de la compilation, il faut spécifier -Werror, ce qui va traiter tous les avertissements comme des erreurs.

De manière générale, il faut comprendre la raison de tous les warnings générés par ton code et les éliminer un par un (ou savoir très exactement ce que tu fais).


Dal
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
Modifié par fiddy le 22/01/2015 à 13:59
Bonjour,

Plusieurs fautes :
# <stdio.h>
Il manque #include
Ce sont des accolades pour entourer le bloc d'une fonction, pas des parenthèses.

printf("%d + %d + %d = %d\n\n",nombre1 + nombre2 +nombre3 = resultat);
Il y a 3 %d, il faut donc 4 arguments. Donc
printf("%d + %d + %d = %d\n\n", nombre1, nombre2, nombre3, resultat);


Cdlt,

Google is your friend
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
22 janv. 2015 à 16:19
Salut fiddy,

ces différentes erreurs étaient corrigées dans le code posté par notre ami à 09:54, lequel comportait lui même d'autres erreurs commentées ce matin et .

Dal
0