Je me mets au C

il te manque en tête de fichier la declaration d’utilisation de la bibliothèque qui contient printf, stdio.h (je crois, sinon, tu fais man printf, et tu sauras).
La ligne à rajouter au début est donc:

#include <stdio.h> (avec <> parceque c’est une lib standard, et pas un truc qui est dans le répertoire ou tu compiles.
Et mets toi dans le rep de gnutoto et fais juste make gnutoto, tu verras que c’est plus rapide à taper que ta ligne de gcc.

D’accord merci ! :slightly_smiling:

Mais pourtant même avec cette erreur j’arrive à lancer l’exécutable.

oui, mais il ne fait rien, si ?
ou alors, tu as un autre gnutoto dans ton path. Que donne which gnutoto ?

wich gnutoto ne donne rien, je reviens à la ligne et ça me redonne la main.

Sinon, j’ai un peu avancé, mais j’ai une erreur de segmentation. Voici mon code :

[code]#include <stdio.h>

int main(int argc, char *argv[])
{
long age = 0, niveau = 4;

printf(“Quel est votre âge ?”);
scanf("%ld", &age);
printf(“Vous avez donc %ld ans !%n%n”, age);

return 0;
}[/code]
Et voici le résultat après compilation :

wavesound@Whale:~/Fichiers temporaires$ /home/wavesound/Fichiers\ temporaires/gnutoto Quel est votre âge ?14 Erreur de segmentation wavesound@Whale:~/Fichiers temporaires$

enlèves les deux %n et remplaces les par des \n. :wink:

Suis-je bête ! Hé bin, c’est drôlement précis tout ça !

[code]wavesound@Whale:~$ /home/wavesound/Fichiers\ temporaires/gnutoto
Quel est votre âge ?14
Vous avez donc 14 ans !

wavesound@Whale:~$
[/code]
Bon, je vais essayez d’intégrer un saut à la ligne pour donner mon âge, comme ça c’est moche.

Et oui, ça pardonne pas…

Yahoo, c’est impeccable ! :smiley:

wavesound@Whale:~$ /home/wavesound/Fichiers\ temporaires/gnutoto Quel est votre âge ? 14 Vous avez donc 14 ans ! wavesound@Whale:~$

[code]#include <stdio.h>

int main(int argc, char *argv[])
{
long age = 0;

printf(“Quel est votre âge ?\n”);
scanf("%ld", &age);
printf(“Vous avez donc %ld ans !\n”, age);

return 0;
}[/code]
Et voila mon premier programme/script, que j’appelle gnuage, sous licence GPL (de toute façon on aurait pas de mal à trouver mon code si je l’aurai rendu propriétaire :laughing:).

A propos, comment faire un portage de mon programme en .exe (ou .bat), pour Windows afin qu’il s’éxecute (bien-sûr :laughing:) en ligne de commandes ?

Tu utilise que des fonctions standards du C, donc il te suffit de recompiler ton programme sous Windows.

Je n’ai pas Windows. :unamused:

Il n’y a pas un compilateur libre pour Windows quelque part ? 8)

Je ne crois pas qu’on puisse compiler pour windows ailleurs que sur un windows, c’est d’ailleur identique pour linux ou bsd, ça n’a pas de rapport avec la licence du compilateur (gcc est porté sous windows).

Tu peut peut être te débrouiller avec wine en installant un compilateur avec est en compilant avec lui.

[code]#include <stdio.h>

int main(int argc, char *argv[])
{
long resultat = 0, nombre1 = 0, nombre 2 = 0;

resultat = 5 + 3;
printf(“Entrez le premier nombre :\n”);
scanf ("%ld", &nombre);
printf(“Entrez le deuxième nombre :\n”);
scanf ("%ld", &nombre);

resultat = nombre1 + nombre2;

printf (“ld + ld = ld\n”, nombre1, nombre2, resultat;

return 0;
}[/code]
Quelqu’un verrait t-il une erreur la-dedans ? La compilation pose problème :

/home/wavesound/Fichiers temporaires/toto.c: In function ‘main’: /home/wavesound/Fichiers temporaires/toto.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before numeric constant /home/wavesound/Fichiers temporaires/toto.c:8: error: missing terminating " character /home/wavesound/Fichiers temporaires/toto.c:9: error: ‘nombre’ undeclared (first use in this function) /home/wavesound/Fichiers temporaires/toto.c:9: error: (Each undeclared identifier is reported only once /home/wavesound/Fichiers temporaires/toto.c:9: error: for each function it appears in.) /home/wavesound/Fichiers temporaires/toto.c:9: error: expected ‘)’ before ‘;’ token /home/wavesound/Fichiers temporaires/toto.c:18: warning: passing argument 1 of ‘printf’ makes pointer from integer without a cast /home/wavesound/Fichiers temporaires/toto.c:18: error: expected declaration or statement at end of input
Ouch !

Edit : C’est en partie débuggué. J’avais laissé un espace à “nombre 2” au début de mon code, et puis on avait “&nombre” au lieu de “&nombre1” et “&nombre2”.
Mais malheureusement j’ai encore des erreurs pendant la compilation…

Décidément !

Manque une parenthèse au dernier printf.

À quoi t eservent les deux premières ligne de la fonction main ? Je comprends bien les déclarations (bien qu’en long soit discutable), mais vois pas à quoi servent les initialisations.

J’avance, il me reste quelques erreurs à déboguer.

[code]#include <stdio.h>

int main(int argc, char *argv[])
{
long resultat = 0, nombre1 = 0, nombre2 = 0;

printf(“Entrez le premier nombre :\n”);
scanf("%ld", &nombre1);
printf(“Entrez le deuxième nombre :\n”);
scanf("%ld", &nombre2);

resultat = nombre1 + nombre2;

printf("%ld + %ld = %ld\n", nombre1, nombre2, resultat);

return 0;
}[/code]

/home/wavesound/Fichiers temporaires/toto.c: In function ‘main’: /home/wavesound/Fichiers temporaires/toto.c:7: error: missing terminating " character /home/wavesound/Fichiers temporaires/toto.c:8: error: expected ‘)’ before ‘;’ token /home/wavesound/Fichiers temporaires/toto.c:17: warning: passing argument 1 of ‘printf’ makes pointer from integer without a cast /home/wavesound/Fichiers temporaires/toto.c:17: error: expected ‘;’ before ‘}’ token
Tout me semble bon, pourtant.

Tu as un \ en trop dans le premier printf

Ah, merci pour ça, je ne l’avais pas vu.

Mais j’avais rentré mon premier code, qui lui était bon, et non le deuxième.

C’est édité, si tu peux y jeter un oeil. :slightly_smiling:

Merci, c’était ça !
Par contre, en rajoutant le & dans mon premier code a fait foirer mon âge : j’avais - plusieurs milliards d’années ! :laughing:

Je ne voulais pas que printf me donne l’adresse mémoire (c’est bien comme ça qu’on dit ?) voila pourquoi le & est utile dans le scanf qui le requiert, mais pas dans le printf qui doit afficher mon âge.

alors là… j’avoue que si tu adores le printf comparé au print de python…
bah vas y fonce sur le C, et oublie pas le C++ après, tu devrais adorer.

et les pointeurs c’est que du bonheur.

les deux images de matt sont pas mal à mon gout. surtout la laisse du chien.

mais Matt, t’as pas parlé de quand on se trimballe avec la laisse, sans le chien qui va avec, par cequ’on a oublié de l’accrocher, et qu’au beau milieu de la rue on dit à son chien ’ qu’il est gentil le gentil toutou ! ! ! ’

bah on passe pour un cinglé, et là le programme il plante direct sans rien prevenir. c’est un peu le danger de se prommener avec une laisse vide.

Voila les deux seuls programmes “pas inutiles” que j’ai écrit pour le moment.

gnuplus-1.0

GNU GPL (General Public License) 2.0
Ce programme n’est disponible pour le moment qu’en français.
Il a été codé en C le 05/07/07.
*/

#include <stdio.h>

int main(int argc, char *argv[])
{
long resultat = 0, nombre1 = 0, nombre2 = 0;
U GPL (General Public License) 2.0\n\nEntrez le premier nombre :\n");
scanf("%ld", &nombre1);
printf(“Entrez le deuxième nombre :\n”);
scanf("%ld", &nombre2);

resultat = nombre1 + nombre2;

printf("%ld + %ld = %ld\n", nombre1, nombre2, resultat);

return 0;
}[/code]

gnuminus-1.0

[code]/*gnuminus-1.0

GNU GPL (General Public License) 2.0
Ce programme n’est disponible pour le moment qu’en français.
Il a été codé en C le 05/07/07.
*/

#include <stdio.h>

int main(int argc, char *argv[])
{
long resultat = 0, nombre1 = 0, nombre2 = 0;

printf(“g(General Public License) 2.0\n\nEntrez le premier nombre :\n”);
scanf("%ld", &nombre1);
printf(“Entrez le deuxième nombre :\n”);
scanf("%ld", &nombre2);

resultat = nombre1 - nombre2;

printf("%ld - %ld = %ld\n", nombre1, nombre2, resultat);

return 0;
}[/code]

gnuminus est un peu calqué sur gnuplus mais bon ! :laughing:

J’en apprends un peu + puis je tenterai un gnumultiplicator et un gnudivisor !

Vous avez des idées de programmes que je peux créer, et qui seraient un peu utiles ?