Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    problema inserimento dati in matrice (in C)

    ciao a tutti
    ho un problema nell'inserimento di caratteri all'interno di una matrice
    ho fatto in questo modo
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 100
    #define M 100
    /*
     * 
     */
    int main() {
        
        char carattere;
        int MAT[N][M];
        int n, m;
        int i, j;
    
        printf ("Inserisci il numero di riche : \n");
        scanf("%d",&n);
        printf ("Inserisci il numero di colonne : \n");
        scanf ("%d",&m);
    
        printf ("Inserisci i caratteri\n");
        for(i = 0; i < n; i++){
            for (j = 0; j < m; j++){
                scanf ("%c",&carattere);
                MAT[i][j] = carattere;
    			
            }
        }
    
        system("PAUSE");
      
        return 0;
    }
    però ho notato che se considero n, m = 3
    mi fa inserire solo 4 caratteri, cioè 2 per riga, come se mi saltasse una scanf per ciclo
    non capisco per quale motivo..qualcuno sa dirmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    35
    non sarebbe più facile fare così?
    codice:
    chat mat[RIGHE][COLONNE];
    for(int a=0;a<RIGHE;a++)
            for(int b=0;b<COLONNE;b++)
                          scanf("%c",&mat[a][b]);

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    scusa ma io devo scrivere la matrice mica leggerla
    devo inserire i caratteri da tastiera per riempirla

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    qualcuno mi aiuta a capire perchè mi inserisce nella matrice un numero di caratteri minore della dimensione della matrice ?
    Per esempio, facendo il debug passo passo, nella cella i=0, j = 0, non mi permette di inserire il carattere da tastiera (scanf) ma prende direttamente un carattere che vedo nel debug, cioè :
    "carattere 10" (con affianco un quadratino...non capisco

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ecco cosa succede facendo il debug per n = m = 3
    riesco ad inserire solo "r" "s" "g" "e"..poichè le altre posizioni non mi permette di inserire i caratteri, inserendomi automaticamente questo carattere 10 che corrisponde ad un quadratino..non capisco perchè

    riga 0--->char 10 r char 10

    riga 1---> s char 10 g

    riga 2--->char 10 e char 10

  6. #6
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Il motivo è abbastanza semplice ... Prendi come esempio questo codice:
    codice:
    char car; 
    scanf("%c", &car);
     printf("Valore di car al primo scanf : %c\n", car);
     /* fflush(stdin); */
     scanf("%c", &car);
     printf("Valore di car al secondo scanf : %c\n", car);
     printf("car convertito in intero : %d\n", (int)car);
    Mettiamo caso che alla prima chiamata di scanf venga digitato il carattere 'q' e poi invio ... quindi sulla stream d' input (stdin) ci saranno questi due caratteri 'q' e '\n' (newline) ... la prima scanf leggerà 'q' e lo metterà in car, quindi stdin ora conterrà solo '\n' ... Siccome al momento della seconda scanf stdin non è vuoto, la scanf inserirà il prossimo carattere di stdin ('\n') in car senza che tu prema niente ... Puoi anche notare dall' ultima printf che il carattere '\n' convertito in intero è 10 (ecco il motivo di quei 10 nella matrice) ... Se provi a "discommentare" fflush(stdin) vedrai che otterrai il risultato da te voluto, questo perchè una chi
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    quindi posso risolvere dando una dimensione a char..giusto?
    mi sa che non risolvo in questo modo!

    non capisco...come mai alla prima scanf, quindi elemento della matrice (0,0)...mi metta subito "char 10", che a quanto pare corrisponde a "\n" e non mi fa inserire il carattere da tastiera..come posso ovviare ?

  8. #8
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    In che senso "dare una dimensione a char"??? Una soluzione è quella di svuotare stdin ( con fflush ) dopo ogni lettura (scanf) . . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Devi inserire la fflush(stdin) PRIMA della scanf ...

    Lo hai fatto?

    Hai provato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    si provato e va tutto ok..grazie
    ma questa è la procedura standard di riempimento di una matrice?
    nel senso si utilizza sempre la funzione
    codice:
    fflush(stdin);
    o quello presentato da me è un caso particolare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.