| koskozThey see me trollin they hatin | Salut tout le monde,
je suis en train de développer un Sudoku en C et avec GTK, mais je rencontre quelques problèmes, aussi bien avec GTK qu'avec le langage lui même.
 
 Premier problème :
 
 Tout d'abord, j'ai un problème avec l'utilisation des pointeurs, plus particulièrement un pointeur de fichier, pour le passer de fonctions en fonctions.
 
 Dans cette fonction, j'ouvre un fichier :
 
 | Code : 
 int gridNbr(int level, FILE **myFile){    char chara;    int lineNbr=0;    // We open the file in function of the difficulty
    switch(level)    {        case 0 :            *myFile = fopen("grilles/facile.sud", "r" );            break;        case 1 :            *myFile = fopen("grilles/moyen.sud", "r" );            break;        case 2 :            *myFile = fopen("grilles/difficile.sud", "r" );            break;    }    if (*myFile == NULL)    {        printf("\nUne erreur est survenue lors du chargement du fichier !\n" );        return 0;    }    // We count the number of grids
    while ((fscanf(*myFile, "%c", &chara)) != EOF)    {        if (chara == '\n')        {            lineNbr++;        }    }    fseek (*myFile, 0, SEEK_SET);    // We return the number of grids
    return (lineNbr / 9);}
 | 
 
 Et dans celle-ci j'essaye de récupérer son contenu :
 
 
 | Code : 
 void loadGrid(GtkWidget *widget, gpointer data, FILE *myFile){    gint i=0, j=0, grid = GPOINTER_TO_INT(data);    gchar caractere;    gint nbr;    while (i < grid*9)    {        fscanf(myFile, "%c", &caractere);        g_print("%c", caractere);        nbr = atoi(&caractere);        if (caractere != '\n')            gridValue[j] = nbr;        if (caractere == '\n')  i++;        if (j<81)            j++;    }    refresh();}
 | 
 
 Second problème :
 
 Je n'arrive pas à récupérer la valeur d'une ligne sélectionnée dans une treelist :
 
 
 | Code : 
 void init_list(GtkWidget *list){    GtkCellRenderer *renderer;    GtkTreeViewColumn *column;    GtkListStore *store;    renderer = gtk_cell_renderer_text_new();    column = gtk_tree_view_column_new_with_attributes("List Items",          renderer, "text", LIST_ITEM, NULL);    gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);    store = gtk_list_store_new(N_COLUMNS, G_TYPE_INT);    gtk_tree_view_set_model(GTK_TREE_VIEW(list),      GTK_TREE_MODEL(store));    g_object_unref(store);}
 | 
 
 Dans cette fonction, le gtk_tree_model_get ne renvoit pas la bonne valeur, mais "123456" (alors qu'il devrait affecter à "value" 1 ou 2 ou 3, etc).
 
 
 | Code : 
 void selectGrid(GtkWidget *widget, gpointer data){    FILE *myFile = NULL;    GtkWidget *window;    GtkWidget *list;    GtkWidget *vbox;    GtkWidget *label;    GtkWidget *play;    GtkTreeSelection *selection;    int i, level = GPOINTER_TO_INT(data);    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);    gtk_container_set_border_width(GTK_CONTAINER(window), 10);    gtk_widget_set_size_request(window, 270, 250);    gtk_window_set_title(GTK_WINDOW(window), "Grilles :" );    list = gtk_tree_view_new();    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);    vbox = gtk_vbox_new(FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), list, TRUE, TRUE, 5);    label = gtk_label_new("" );    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);    gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);    gtk_container_add(GTK_CONTAINER(window), vbox);    init_list(list);    for(i=0; i<gridNbr(level, &myFile); i++)    {        add_to_list(list, i+1);    }    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));    // We catch the value of the selected row
    GtkTreeIter iter;    GtkTreeModel *model;    gint value;    if (gtk_tree_selection_get_selected(      GTK_TREE_SELECTION(selection), &model, &iter)) {            gtk_tree_model_get(model, &iter, LIST_ITEM, &value,  -1);    }    play = gtk_button_new_with_label("Jouer" );    gtk_box_pack_start(GTK_BOX(vbox), play, TRUE, TRUE, 0);    gtk_widget_set_size_request(play, 150, 75);    g_signal_connect(G_OBJECT(play),"clicked", G_CALLBACK(loadGrid), (gpointer) value);    g_signal_connect_swapped (G_OBJECT (play), "clicked", G_CALLBACK (gtk_widget_destroy), (gpointer) window);    gtk_widget_show_all(window);}
 | 
 
 Troisième problème :
 
 
 | Code : 
 void loadGrid(GtkWidget *widget, gpointer data, FILE *myFile){    gint i=0, j=0, grid = GPOINTER_TO_INT(data);    gchar caractere;    gint nbr;    //grids = fopen("grilles/facile.sud", "r" );
    while (i < grid*9)    {        fscanf(myFile, "%c", &caractere);        g_print("%c", caractere);        nbr = atoi(&caractere);        if (caractere != '\n')            gridValue[j] = nbr;        if (caractere == '\n')  i++;        if (j<81)            j++;    }}
 | 
 
 Cette fonction devrait copier chaque caractère de mon fichier (une grille de sudoku, donc 9 chiffres 9 ligne, chaque chiffre étant séparé d'un espace) dans le tableau (global) gridValue.
 Or, une fois la copie faite, au lieu d'avoir des nombres compris entre 0 et 9 comme ceux du fichier, j'ai ce genre de chiffres :
 48 32 48 39...
 
 Voilà, trois problèmes qui me font vraiment ch***, merci d'avance
   --------------- Twitter
 
   |