Probélme de compilation en C

Quel âge avez-vous ?

Moins de 18 ans

18 ans ou plus

CDeX   Probélme de compilation en C 36 21/04/10 à 08:03

Bonjour à toutes et à tous

Voilà, j'ai commencé a programmer en c depuis peu, mais j'ai un petit souci. Je travaille avec codeblocks et lorsque je teste mon programme dans l'environement il se lance et se déroule parfaitement. Seulement, quand je veux le compiler, l'executable et créé mais lorsque que je le lance, la fenetre s'ouvre et se ferme aussi tot, impossible donc d'utiliser mon programme.
Si quelqu'on pouvait m'aider, je lui serai reconnaissant.

Merci
CDeX

Probélme de compilation en C 21/36 21/04/2010 à 19:57
Allez, je vous mets le mien x)

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

int main(int argc, char *argv[])
{
int reponse = 0;
//int jeux = 0;
printf ("\t\n\n Veux-tu jouer ? ");
printf ("\t\t\n 1 - oui ");
printf ("\t\t\n 2 - non ");
scanf ("%d",&reponse);

if (reponse == 1)
{
srand(time(NULL));

int niveau=0;
printf("\tChoisis un niveau de jeu");
scanf("%d",&niveau);

int MAX=100*niveau, MIN=1, coups=0;
int nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
int nombreEntre=0;

do
{
coups++;
printf ("Quel est le nombre mystere ?");
scanf("%d",&nombreEntre);
if (nombreEntre > nombreMystere) printf ("Non, c'est moins");
else if (nombreEntre < nombreMystere) printf ("Non, c'est plus");
else printf ("Bravo tu as trouve =) en %d coups \n\n\n\n\n",coups);

}
while(nombreEntre!=nombreMystere);
return 0;
}

else
{
printf("\nDommage, a bientot\n\n\n\n\n");
return 0;
}
}
Probélme de compilation en C 22/36 21/04/2010 à 20:02
Et comme le dit canardvert, scanf c'est nul.
C'est un fusil à pompe pour tuer une mouche, et en plus ton programme plante si on met autre chose qu'un nombre.
CDeX   
Probélme de compilation en C 23/36 22/04/2010 à 11:23
Si scanf ce n'est pas bien, que faire ? je ne demande que a apprendre. Smile
Et je n'ai pas bien compris comment mettre le systeme en pause le coup du SYSTEM(PAUSE); comment ça marche ?

Et une autre question, comment je peux faire une variable ou je puisse rentrer un nom par exemple ?
Et ... je suis p-t un Gros noob, mais qu'est ce qu'un getchar() et comment l'utiliser ....

Merci ^^
CDeX   
Probélme de compilation en C 24/36 22/04/2010 à 13:10
Un petit coup de main pour un appris qui galère ? Smile
CDeX   
Probélme de compilation en C 25/36 22/04/2010 à 15:26
vraiment personne ?
Probélme de compilation en C 26/36 22/04/2010 à 17:19
Tu sais, ya pas forcément des gens à toute heure sur SE.

Pour avoir une variable qui prend un prénom ... string variable = 'prénom';

ou, si tu utilises un scanf, scanf("%s (je crois)", &variable);

ensuite printf("%s", variable);

Mes notions de C remontent à loin Sad
Sussu   
Probélme de compilation en C 27/36 22/04/2010 à 17:29
Je suis débutant moi aussi mais je vais essayer de t'aider :

Pour une variable qui prend un prénom , il faut utilisé les chaines
Tu déclares une variable comme ceci : char prenom[] = "Thomas";
Enfin c'est un exemple

Après pour l'affiché , tu fais : printf("%s", prenom);

Si tu veux récupérer le prenom qu'un utilisateur tape , tu fais scanf("%s", prenom);
Probélme de compilation en C 28/36 22/04/2010 à 21:15
getchar() permet de lire un caractère depuis le stdin, c'est à dire un buffer d'entrée (ou de saisie). Par exemple, si je me souviens bien, quand tu écris sur ton clavier alors que ton programme fonctionne, l'ordinateur enregistre tes frappes et les transmets au programme.

char c ;
c = getchar();


Sauf que si tu tapes quelquechose avant, ça foire. Il faut donc lire tous les caractères inutiles.

char c;

while c != EOF; /* EOF, c'est le "end of file", en gros, le caractère qu'il y a après tous les autres */
... c = getchar; /* les "..." servent à marquer l'indentation, je sais pas si SE corrige automatiquement */

c = getchar();


Et là, ta variable c contient bien le dernier caractère entré.

Ça parait compliqué mais au moins c'est propre.

Ensuite, récupérer une chaine de caractères. Il faut utiliser un tableau de char.

/* Initialisation */
char nom[100] = {0};
char c;

/* Vidage du buffer stdin */
while c != EOF;
... c = getchar;

printf("Entrez votre nom \n");

/* Recupération chaine caractère */
while (c!=EOF && c!=\n);
... long int i = 0;
... c = getchar();
... nom[i] = c;
... i++;

printf("%s", nom);


Pour le system("PAUSE"); , je sais pas exactement ce que ça fait. x)
Probélme de compilation en C 29/36 22/04/2010 à 22:55
Phylos a écrit :
Pour avoir une variable qui prend un prénom ... string variable = 'prénom';

En C tu n'as pas de string…

ou, si tu utilises un scanf, scanf("%s (je crois)", &variable);

Ouais, mais faut lui passer un char*


Canardvert a écrit :

getchar() permet de lire un caractère depuis le stdin, c'est à dire un buffer d'entrée (ou de saisie). Par exemple, si je me souviens bien, quand tu écris sur ton clavier alors que ton programme fonctionne, l'ordinateur enregistre tes frappes et les transmets au programme.

Ça s'appelle l'entrée standard et ce n'est pas vraiment un "buffer", plutôt un flux.


Sauf que si tu tapes quelquechose avant, ça foire. Il faut donc lire tous les caractères inutiles.

Pas vraiment, non

char c;

while c != EOF; /* EOF, c'est le "end of file", en gros, le caractère qu'il y a après tous les autres */
... c = getchar; /* les "..." servent à marquer l'indentation, je sais pas si SE corrige automatiquement */

c = getchar();


Et là, ta variable c contient bien le dernier caractère entré.

Non, EOF n'intervient que lorsqu'on lit un fichier (ce qui n'est pas le cas de l'entrée standard), ou que le mec fait ctrl+D sous Linux. (sous windows j'en sais rien).


Ça parait compliqué mais au moins c'est propre.

Mais faux.

Ensuite, récupérer une chaine de caractères. Il faut utiliser un tableau de char.

/* Initialisation */
char nom[100] = {0};

Super, segmentation fault si le mec tape plus de 100 caractères…

char c;

/* Vidage du buffer stdin */
while c != EOF;
... c = getchar;

Je pige pas ce que tu cherches à faire, y'aura rien sur l'entrée standard...

printf("Entrez votre nom \n");

/* Recupération chaine caractère */
while (c!=EOF && c!=\n);
... long int i = 0;
... c = getchar();
... nom[i] = c;
... i++;

Tu remets i à 0 à chaque tour de boucle…
Donc ça ne changera que la première case du tableau…
Probélme de compilation en C 30/36 23/04/2010 à 11:29
Mouarf, on va dire que j'étais fatigué x).

Sauf que si tu tapes quelquechose avant, ça foire. Il faut donc lire tous les caractères inutiles.

Pas vraiment, non


Sous Windows, si. Le buffer du flux d'entrée (puisque tu tiens tant que ça au mot flux) n'est vide au lancement du programme que sous Linux.
D'où le "vidage" du stdin.

Pour le long int i = 0;, oui, je me suis trompé, il faut le mettre avant le début de la boucle.

Et pour le segmentation fault, j'ai oublié d'ajouter une condition i [inférieur] 100 et une instruction nom[100] = '\n' après la boucle.
RTFM   
Probélme de compilation en C 31/36 23/04/2010 à 14:32
Le mieux pour recuperer ce que tape un mec proprement :

#include < stdlib.h>
#define BUFF_SIZE 1024

int main(int ac, char **av)
{
char buff[BUFF_SIZE];

/* On rempli de \0 notre buffer pour pas avoir n'importe quoi dedans et on attend que le mec rentre son pseudo en validant par [ENTER] */
memset(0, buff, BUFF_SIZE);
if (read(0, buff, BUFF_SIZE) == -1)
exit(EXIT_FAILURE);

/* On affiche */
putstr(buff);
}

Je code sous freeBSD, donc apres je sais pas si sur windows ca marche tout ca.
Probélme de compilation en C 32/36 24/04/2010 à 01:52
(et si le mec a un pseudo de plus de 1024 caractères, tu l'as pas en entier Sad)
Probélme de compilation en C 33/36 24/04/2010 à 13:21
Bruckneudorf a écrit :

Phylos a écrit :
Pour avoir une variable qui prend un prénom ... string variable = 'prénom';

En C tu n'as pas de string…


Au temps pour moi, ça fait plus d'un an que j'ai pas touché au C, j'ai vu des langages un peu plus récents depuis, qui connaissent le type String Smile
RTFM   
Probélme de compilation en C 34/36 24/04/2010 à 13:48
Bruckneudorf a écrit :
(et si le mec a un pseudo de plus de 1024 caractères, tu l'as pas en entier )


Bah il met un pseudo plus cours.
1024 caractères c'est beaucoup quand même pour un pseudo nan ? ^^

Et puis j'ai fais un define au moins le mec met la valeur qu'il veut.
Probélme de compilation en C 35/36 24/04/2010 à 16:17
Ya pas ce genre de problèmes en PHP :p
Probélme de compilation en C 36/36 27/04/2010 à 23:13
Phylos a écrit :

Ya pas ce genre de problèmes en PHP :p


Non mais y'en a des milliers d'autres.
Recommande ce site a tes ami(e)s | Aller en haut

Partenaires : Énigmes en ligne