IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Array non reconnu comme tel par un printf.


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Par défaut Array non reconnu comme tel par un printf.
    Bonjour, je viens solliciter votre aide pour un problème probablement idiot, mais que je m'échine à régler depuis deux heures.

    Problème : Je code actuellement un Sudoku (sans interface graphique, uniquement affiché avec des printf), je dois donc avoir recours à des tableaux. J'ai une fonction qui prend en paramètre un tableau à deux dimension de 9 par 9 initialisé à 0, et qui me retourne, normalement, une grille remplie avec des nombres.
    Sauf que, lorsque je veux afficher la grille remplie dans mon programme principal, j'ai une erreur à l'endroit de mon printf, qui me dit "error, subscipted value is neither array nor pointer nor vector".

    Ma fonction main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    int main()
    {
        int grille[9][9];
        int j;
        int i;
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
                {
                    printf("%i", grille[i][j]);
                }
            printf("\n");
        }
        int grille2;
        grille2 = Plateau(grille);       #J'appelle la fonction pour remplir la grille, voir ci-dessous
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
                {
                    printf("%i", grille2[i][j]);
                }
            printf("\n");
        }
    }
    Et la fonction qui est sensé me retourner la grille remplie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    int Plateau(int grille[9][9])
    {
        int nbrand = rand()%(8)+1;
        int i;
        int j;
        int condition;
        int colonne;
        int ligne;
        int carre;
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                roll:
                {
                    r = rand()%9 + 1;
                    grille[i][j] = r;
                    printf("%i", r);
                    colonne = TestColonne(grille[9][9],i,j);    
                    ligne = TestLigne(grille[9][9],i,j);
                    carre = TestCarre(grille[9][9],i,j);
                    if(colonne == 1 || carre == 1 || ligne == 1)      #1 signifie que la condition n'est pas remplie et qu'il faut donc relancer le random pour obtenir un autre nombre.
                    {
                        goto roll;
                    }
     
                }
            }
        }
        return grille[9][9];
    }

    C'est surement une erreur idiote, mais je suis plus familiarisé avec le python qui est moins embêtant avec les déclarations de variables et leur type. Merci d'avance !

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Ca existe %i pour printf ?

    pour afficher un nombre décimal, on utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int variable_int;
    variable_int=5;
    printf("%d",variable_int);
    T'affichera 5.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    tu utilises ton tableau (printf) avant de l'avoir initialisé : vraie erreur ou mauvaise retranscription ?
    J'ai pas regardé le reste du code pour l'instant.

    edit @chrtophe : je connaissais pas non plus, mais oui, ça a l'air d'être un équivalent de %d d'après la doc.

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    grille2, un int, est utilisé comme un int [][] (ou int **).

    Il y a beaucoup d'erreurs dans ce code, à commencer par la fonction Plateau qui retourne un élément au-delà des limites de la grille. Tu devrais peut-être commencer le C par quelque chose de plus simple, ou faire plus de tests unitaires pour appréhender le langage.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Par défaut
    A vrai dire je n'ai jamais manipulé les tableaux en les donnant en paramètre à une fonction avant, et malheureusement je ne peux pas commencer le C de manière plus légère c'est le projet qu'on nous a donné à faire.
    Et c'est le premier, je me figurais donc que ce n'était pas si compliqué, je me trompais visiblement.

    Pourriez vous m'expliquer comment manipuler correctement les arrays dans ces fonctions pour que je puisse m'améliorer ?

    Citation Envoyé par jopopmk Voir le message
    Salut,

    tu utilises ton tableau (printf) avant de l'avoir initialisé : vraie erreur ou mauvaise retranscription ?
    J'ai pas regardé le reste du code pour l'instant.

    edit @chrtophe : je connaissais pas non plus, mais oui, ça a l'air d'être un équivalent de %d d'après la doc.

    Comment cela ? Il me semble pourtant bien déclarer mes grilles avant de les utiliser.

    PS : J'ai édité ma seconde fonction, trouvant la formulation plus adéquate.

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    La déclaration est une chose (allocation mémoire), l'initialisation en est une autre (écrire une valeur dans cette zone mémoire). Suivant le compilateur et les options choisies tu devrais même pas pouvoir compiler ce programme.

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    edit @chrtophe : je connaissais pas non plus, mais oui, ça a l'air d'être un équivalent de %d d'après la doc.
    J'ai regardé la différence. %i retourne un entier signé strict, %d retourne un entier sauf si 0x devant retourne la valeur convertie de hexadécimal au décimal, si 0 au début retourne la valeur convertie de l'octal vers le décimal.

    Dans le cadre du retour d'une variable int, %i et %d seront donc équivalent, mais en cas de retour d'une valeur chaine, l'interprétation pourra prêter à confusion surtout pour l'octal, car 033 en octal donne 27 en décimal.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/09/2013, 16h40
  2. Enregistrement de nombre en excel par l’utilisation de OleDb reconnu comme texte
    Par thefutureisnow dans le forum Accès aux données
    Réponses: 1
    Dernier message: 23/03/2011, 12h30
  3. Réponses: 0
    Dernier message: 29/10/2010, 10h01
  4. Réponses: 3
    Dernier message: 13/10/2010, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo