Partage
  • Partager sur Facebook
  • Partager sur Twitter

'scanf' qui cause des "warning"

scanf deprecated

    17 mai 2006 à 3:20:47

    Salut à tous, j'ai un petit probleme avec mon code il compile bien mais j'ai quand même des "warning" après compilation et c'est en rapport avec les 'scanf' o_O

    désole tout le code ça va faire un peu porc :

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

    /*Variables : min = Nombre minimum, min00 Nombre maximum, Nombrealea = Nombre aléatoire, Nombrepropose = Nombre proposé, yn = yes/no cmpt = Compteur*/

    int Generateur(int min, int max)
    {
    int Nombrealea;
    Nombrealea = (rand() % (min - max + 1)) + min;
    return Nombrealea;
    }

    int Difficulte(int mode2)
    {
    int max;

    printf("\n\t\t\t\tMode de jeu :\n\n\n");
    printf("\n\n1. Facile\n\n2.Normale\n\n3. Difficile");
    printf("\nVoulez vous jouer en mode Facile normale ou difficile ?");
    scanf("%ld",&mode2);

    if ( mode2 == 1 )
    max = 100;
    else if ( mode2 == 2 )
    max = 500;
    else
    max = 1000;
    return max;
    }

    int main(int argc, char *argv[])
    {
    int min = 1, max = 0;
    int Nombrealea = 0, Nombrepropose = 0, cmpt = 0, Nombrejoueur = 0, score = 0, mode2 = 0;
    int Nombrealeaj2 = 0, Nombreproposej2 = 0, scorej2 = 0, Partiesj2 = 1, cmptj2 = 0;

    char Joueur1nom[16], Joueur2nom[16];

    max = Difficulte(mode2);

    system("CLS");

    printf("\n\t\t\t\tMode de jeu :\n\n\n");
    printf("\n\n1. 1 Joueur\n\n2. 2 Joueurs\n");
    printf("\n1 ou 2 joueurs ? : ");
    scanf("%ld",&Nombrejoueur);
    system("CLS");


    printf("Joueur 1 votre nom : ");
    scanf("%s",Joueur1nom);
    system("cls");
    if ( Nombrejoueur == 2 )
    {
    printf("Joueur 2 votre nom : ");
    scanf("%s",Joueur2nom);
    system("cls");
    }

    Nombrealea = Generateur(min,max);

    srand(time(NULL));
    Nombrealea = Generateur(min,max);

    while ( Nombrealea != Nombrepropose )

    {

    if ( Nombrejoueur == 1 || Nombrejoueur == 2 && Partiesj2 == 1 )
    {
    printf("%s Entrez le nombre entier compris entre 1 et %ld : ",Joueur1nom,max);
    scanf ("%ld",&Nombrepropose);
    Partiesj2 = Partiesj2 + 1;
    cmpt++;

    }
    else if ( Nombrejoueur == 2 && Partiesj2 == 2 )
    {
    printf("%s Entrez le nombre entier compris entre 1 et %ld : ",Joueur2nom,max);
    scanf ("%ld",&Nombrepropose);
    Partiesj2 = Partiesj2 - 1;
    cmptj2++;
    }
    if ( Nombrepropose > max || Nombrepropose < 1 )
    printf("\n\nHola j'ai dis un nombre compris entre 1 et %ld\n\n\n",max);

    if ( Nombrealea > Nombrepropose || Nombrealeaj2 > Nombreproposej2 )
    printf("\nle nombre que vous cherchez est superieur a %ld\n",Nombrepropose);

    else if ( Nombrealea < Nombrepropose || Nombrealeaj2 < Nombreproposej2 )
    printf("\nLe nombre que vous cherchez est inferieur a %ld\n",Nombrepropose);

    score = 100 - cmpt*5;

    if ( Nombrejoueur == 1 || Nombrejoueur == 2 && Partiesj2 == 1)
    {
    printf("%s : Votre score est de : %ld\n\n",Joueur2nom,score);
    }

    else if ( Nombrejoueur == 2 && Partiesj2 == 2 )
    {
    printf("%s : Votre score est de : %ld\n\n",Joueur1nom,score);
    }


    }
    system("CLS");
    if ( cmpt >= 20 && Nombrealea == Nombrepropose || cmpt >= 20 && Nombrealeaj2 == Nombreproposej2)
    {
    printf("\n\nVous avez reussi en %ld tentatives c'est enorme...\n\n",cmpt);
    printf ("\n\nVotre ridicule score est de %ld\n\n",score);
    }
    if ( Nombrejoueur == 2 && Partiesj2 == 1 )
    printf("\n\n%s vous gagnez la partie !\n\n",Joueur2nom);

    else if ( Nombrejoueur == 2 && Partiesj2 == 2 )
    printf("\n\n%s vous gagnez la partie !\n\n",Joueur1nom);

    if ( Nombrealea == Nombrepropose )
    {
    printf("\n\nVous avez fait %ld tentatives avant d'obtenir le bon nombre\n\n\n",cmpt);
    printf("%s : Votre score est de %ld\n\n",Joueur1nom,score);
    }

    else if ( Nombrealea == Nombreproposej2 && cmpt <= 20 || cmptj2 <= 20 )
    {
    printf("\n\nVous avez fait %ld tentatives avant d'obtenir le bon nombre\n\n\n",cmptj2);
    printf("%s : Votre score est de %ld\n\n",Joueur2nom,scorej2);
    }

    if ( score == 0 )
    {
    system("cls");
    printf("\n\nVous avez perdu\n\n");
    }
    system("PAUSE");

    }



    j'ai cherché mais j'ai pas trouvé grand chose.. le forum msdn (en anglais forcément) je le met ça peut toujours aider

    forum ms =S ^^

    au passage y'a pas mal d'erreur dans mon code je le sais =) j'ai tellement modifié ce code que bon =p mais ne me les dites pas j'essaye de le faire =)

    EDIT : Euh finalement non il compile pas bien... juste en mode debug, jespere que ce problème va être résolu du coup :(
    edit² : Bon bah j'ai retiré le gras qui ne fonctionne pas dans < code> en plus ^^
    merci =)
    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2006 à 9:42:24

      Citation : Stealkillandhide

      Salut à tous, j'ai un petit probleme avec mon code il compile bien mais j'ai quand même des "warning" après compilation et c'est en rapport avec les 'scanf' o_O

      I : je met tous les scanf en gras


      Mauvaise idée... On est capable de repérer un scanf() nous même...

      Ton code ne compile pas bien du tout :

      Compiling: main.c
      main.c:9: warning: no previous prototype for 'Generateur'
      main.c:16: warning: no previous prototype for 'Difficulte'
      main.c: In function `Difficulte':
      main.c:22: warning: long int format, int arg (arg 2)
      main.c: In function `main_':
      main.c:48: warning: long int format, int arg (arg 2)
      main.c:64: warning: passing arg 1 of `srand' as unsigned due to prototype
      main.c:71: warning: suggest parentheses around && within ||
      main.c:73: warning: long int format, int arg (arg 3)
      main.c:74: warning: long int format, int arg (arg 2)
      main.c:81: warning: long int format, int arg (arg 3)
      main.c:82: warning: long int format, int arg (arg 2)
      main.c:87: warning: long int format, int arg (arg 2)
      main.c:90: warning: long int format, int arg (arg 2)
      main.c:93: warning: long int format, int arg (arg 2)
      main.c:97: warning: suggest parentheses around && within ||
      main.c:99: warning: long int format, int arg (arg 3)
      main.c:104: warning: long int format, int arg (arg 3)
      main.c:110: warning: suggest parentheses around && within ||
      main.c:112: warning: long int format, int arg (arg 2)
      main.c:113: warning: long int format, int arg (arg 2)
      main.c:123: warning: long int format, int arg (arg 2)
      main.c:124: warning: long int format, int arg (arg 3)
      main.c:127: warning: suggest parentheses around && within ||
      main.c:129: warning: long int format, int arg (arg 2)
      main.c:130: warning: long int format, int arg (arg 3)
      main.c:140:2: warning: no newline at end of file
      main.c:140: warning: control reaches end of non-void function
      Linking console executable: D:\dev\ed02\cb\ed02.exe
      Process terminated with status 0 (0 minutes, 3 seconds)
      0 errors, 26 warnings

      Visiblement, tu ne sais pas utiliser scanf(), comme 95% des codeurs... 2 solutions :
      • Apprendre à utiliser scanf() correctement
      • Apprendre à ne plus utiliser scanf() et utiliser fgets() et la fonction de conversion qui va bien...


      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        17 mai 2006 à 13:06:03

        mais c'est quoi ce main ? :

        int Generateur(int min, int max)
        mets ensuite les blises C/C++, on ets capable de reperer les scanf tout seul :lol: .

        Tes scanf ont l'air bon. Ca vient plus tout de ton "main" je pense ou alors y'a d'autres erreurs.
        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2006 à 14:52:45

          Effectivement.. je ne sais pas utiliser un scanf, moi qui pensait que c'était une simple ('fonction ?' je savais pas quel terme employer ^^) comme printf quoi =)

          mais faut dire que c'est pas si simple que ça finalement, je vais allez relire un cours sur les tableaux et relire ce cours puis si jamais je comprend toujours pas je ferai un up

          pour ce qui est des warning chez toi je ne les vois pas chez moi o_O

          sinon je veux bien un exemple de comment faire pour utiliser correctement un scanf

          Citation : -ed-

          Visiblement, tu ne sais pas utiliser scanf(), comme 95% des codeurs... 2 solutions :

          * Apprendre à utiliser scanf() correctement
          * Apprendre à ne plus utiliser scanf() et utiliser fgets() et la fonction de conversion qui va bien...



          je vais perseverer dans le scanf

          euh derniere chose j'doute beaucoup des "%ld" dans mes 'scanf' ça peut venir de la aussi non ?

          merci de vos réponses en attendant
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2006 à 0:23:28

            Citation : Stealkillandhide

            pour ce qui est des warning chez toi je ne les vois pas chez moi o_O


            [gcc] Ajoute les options de compilation
            -Wall -Wextra -O2

            Citation : Stealkillandhide


            sinon je veux bien un exemple de comment faire pour utiliser correctement un scanf


            Je t'ai donné un lien.

            Citation : Stealkillandhide


            euh derniere chose j'doute beaucoup des "%ld" dans mes 'scanf' ça peut venir de la aussi non ?


            Visiblement, il y a des incohérence entre les types et les formats. "%ld" attend l'adresse d'un long, pas d'un int...
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
            Anonyme
              18 mai 2006 à 8:02:16

              Citation : -ed-

              Apprendre à ne plus utiliser scanf() et utiliser fgets() et la fonction de conversion qui va bien...


              ça ok, y'a strtol, strtod... mais est-ce que sscanf marche aussi ou pas pour les mêmes raisons que scanf? (l'utilisateur n'est pas une machine et ne rentre donc pas une entrée formatée...)
              • Partager sur Facebook
              • Partager sur Twitter
                18 mai 2006 à 13:58:35

                Citation : Zulon

                Citation : -ed-

                Apprendre à ne plus utiliser scanf() et utiliser fgets() et la fonction de conversion qui va bien...


                ça ok, y'a strtol, strtod... mais est-ce que sscanf marche aussi ou pas pour les mêmes raisons que scanf? (l'utilisateur n'est pas une machine et ne rentre donc pas une entrée formatée...)


                sscanf() peut traiter des cas simples, mais il est vrai que l'on tombe rapidement sur des problèmes d'erreur de formatages... les fonctions strto*() sont plus puissantes pour faire les contrôles d'entrée 'humaines'... Mais sscanf() bien utilisé (voir scanf()), permet de faire du filtrage efficace avec les expression rationelles. C'est cependant assez gore...

                • Partager sur Facebook
                • Partager sur Twitter
                Music only !

                'scanf' qui cause des "warning"

                × 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