Partage
  • Partager sur Facebook
  • Partager sur Twitter

2 erreur lors de la compilation inconnu

Sujet résolu
    20 septembre 2017 à 16:57:50

    bonjour,

    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

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2017 à 17:39:51

      Tu as écrit argc[1] au lieu de argv[1]

      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.

      -
      Edité par zoup 20 septembre 2017 à 17:46:29

      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2017 à 19:10:30

        Et ligne 36 : L'opérateur de test d'égalité c'est == et non pas =

        -
        Edité par rouloude 21 septembre 2017 à 17:56:44

        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2017 à 11:04:06

          Hello,

          Je ne suis pas contre les goto, mais dans le cas présent, il n'a vraiment rien à faire là. Tu peux facilement t'en passer.

          De plus, ton programme ne va jamais s'arrêter: il manque des { }.... je te laisse chercher.

          -
          Edité par edgarjacobs 21 septembre 2017 à 11:07:36

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            21 septembre 2017 à 17:57:47

            Quel idée de faire la réponse sur ton post initiale, on comprend plus rien après !
            • Partager sur Facebook
            • Partager sur Twitter
              21 septembre 2017 à 19:29:58

              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.

              • Partager sur Facebook
              • Partager sur Twitter
                21 septembre 2017 à 20:05:30

                Re,-

                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

                • Partager sur Facebook
                • Partager sur Twitter

                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.
                • Editeur
                • Markdown