je me suis mis depuis peut au c. j essai de créer un petit jeu mais lors de la compilation ils y as 2 erreur mais je ne sais comment les résoudre...
merci de votre aide
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char **argv)
{
char *str=NULL;
size_t n=9;
int t;
int j;
j=1;
if (argc > 1)
{
if (atoi(argc[1]) > 50)
{
printf("le nombre d'allumetes ne peut ecceder 50 \n");
return(0);
}
else
{
t=atoi(argv[1]);
debut:
while(t >= 1)
{
printf("joueur %d > ",j);
getline(&str, &n, stdin);
if (atoi(str)<=3 && atoi(str)>=1)
{
t=t-atoi(str);
printf("nombre= %d \n",t);
}
else
{
printf("le nombre enre n'est pas valide, recommencer \n");
}
if (j=1)
j=2;
}
printf("quelqun a gagner \n");
free(str);
return (0);
}
}
else
t=10;
printf("comme aucun nombre a eter donner, on prend 20 allumettes \n");
goto debut;
return(0);
}
et l'erreur:
C:\Users\admin\Desktop\C\test>gcc test.c -o test test.c: In function 'main': test.c:14:17: error: subscripted value is neither array nor pointer nor vector if (atoi(argc[1]) > 50) ^ test.c:26:5: warning: implicit declaration of function 'getline' [-Wimplicit-function-declaration] getline(&str, &n, stdin); ^
merci de votre aide :S
edit:
merci a tous
mais juste zoup que veux tu dire par :"L'idéal est d'utiliser un tableau statique de taille suffisante comme buffer pour mémoriser la ligne entrée."
comme je l'ai dit je débute donc peux-tu m’expliquer.
ps,je suis arriver a:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char *str=NULL;
size_t n=9;
int allumettes;
int j;
signed char play=1;
int changj()
{
if (j==1)
{
j=2;
}
else
{
j=1;
}
return(0);
}
int main(int argc,char **argv)
{
while (play=1)
j=1;
{
if (argc > 1)
{
if (atoi(argv[1]) > 50)
{
printf("le nombre d'allumetes ne peut ecceder 50 \n");
return(0);
}
else
{
allumettes=atoi(argv[1]);
while(allumettes >= 1)
{
printf("joueur %d > ",j);
getline(&str, &n, stdin);
if (atoi(str)<=3 && atoi(str)>=1)
{
allumettes=allumettes-atoi(str);
printf("nombre= %d \n",allumettes);
}
else
{
printf("le nombre entre n'est pas valide, recommencer \n");
}
changj();
}
printf("quelqun a gagner \n");
play=0;
return (0);
}
}
else
{
allumettes=20;
printf("comme aucun nombre a eter donner, on prend 20 allumettes \n");
}
}
return(0);
}
- Edité par yolinklinsse 21 septembre 2017 à 16:11:21
Pour getline, il y a un problème, tu n'as pas alloué de place dans pour stocker la ligne. L'idéal est d'utiliser un tableau statique de taille suffsante comme buffer pour mémoriser la ligne entrée.
Ah oui, heureusement que tu l'as vu car je n'aurais pas pensé à chercher la réponse dans le post initial.
"mais juste zoup que veux tu dire par :"L'idéal est d'utiliser un tableau statique de taille suffisante comme buffer pour mémoriser la ligne entrée."
comme je l'ai dit je débute donc peux-tu m’expliquer."
Lorsque tu écris "getline(&str, &n, stdin);", tu supposes que str pointe sur une zone de mémoire capable de mémoriser les caractères saisis au clavier. Alors que non, str est juste un pointeur qui ne pointe sur rien puisqu'égal à NULL. Tu pourrais faire un malloc, mais de quelle taille?
Autant faire un tableau statique: char str[512]; // tu peux mettre plus ou moins que 512, selon la taille maxi de la saisie clavier.
Toujours pas correct: si argc n'est pas > 1, tu boucles.... voir aussi (bien sur) les 2 posts de mes vdd
EDIT: non, ça ne boucle pas, mais cela ne fera pas ce que tu veux. Voir lignes 26 - 27 - 28. Et comme déjà écrit: == pas = pour les comparaisons....
- Edité par edgarjacobs 21 septembre 2017 à 20:10:24
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
2 erreur lors de la compilation inconnu
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent