Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Matrice di stringhe

    Ciao raga sono un newbie del C infatti sono studente del primo anno di informatica, volevo sapere perchè il progrmma che sto scrivendo nel quale devo mettere una matrice di char, una volta compilato il proramma non mi fa scrivere tutti i char che ho dichiarato nella matrice (nel prompt dei comandi). Credendo che il problema fosse nel riempimento della matrice, ho provato a fare lo stesso programma con degli interi e con quelli funziona,infatti se vado a dare una matrice composta da 5x5 righe e colonne, mi richiede 25 numeri interi, ma facendolo con i char me ne richiede molti di meno, tipo la metà Xkè????
    Per favore rispondetemiiiiiiii!!!!!!!
    Vi posto il mio codice:


    #include <stdio.h>
    #define col 50
    #define rig 30

    int confronto(char[][col],int);

    main(){

    char A[rig][col];
    int i,j,x,res;

    printf("Dammi 1 N >0. N x N sara' la grandezza della matrice\n");
    scanf("%d",&x);

    //RIEMPIMENTO MATRICE
    for(j=0;j<x;j++){
    printf("Riempire la %d Riga con %d lettere\n ",j+1,x);
    for(i=0;i<x;i++)
    scanf("%c",&A[i][j]);
    }
    res=confronto(A,x);

    if(res==1)printf("TRUE\n");
    else printf("FALSE\n");



    }

    int confronto(char c[rig][col],int x){
    int i,j,k,res;

    for(j=0;j<x;j++)
    for(i=0;i<x;i++)
    for(k=0;k<x;k++){
    if(c[i][j]!=c[k][j+1])
    res=1;
    if(c[i][j]!=c[k][j+1])
    res=0;
    }
    return res;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Una stringa in C e' un vettore di char e il numero di elementi rappresenta i caratteri della stringa piu' il terminatore. Si scrive, ad esempio

    char stringa[100];

    Se vuoi gestire un vettore di 10 stringhe, scrivi

    char stringhe[10][100];

    Se vuoi gestire un array di 10 x 20 stringhe, scrivi

    char stringhe[10][20][100];

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

  3. #3
    oppure puoi dichiarare un matrice di puntatori a char!!

    char * [rig][col];

    pero cosi devi stare attento perchè devi allocare tu la grandezza della stringa...

  4. #4

    Re: [C] Matrice di stringhe

    Originariamente inviato da carloekekko
    ... progrmma che sto scrivendo nel quale devo mettere una matrice di char ...
    Io non ho capito, devi usare una matrice di stringhe, o una matrice di char ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    secondo me per quello che devi fare, va benissimo usare una matrice di char sovradimensionata, come hai fatto tu, e comunque c'è un problema nel caricamento della matrice perchè quando si inseriscono i caratteri con la
    codice:
    scanf("%c",&carattere);
    c'è il problema del solito return(invio) che di per sè rappresenta un carattere(\n); per questo motivo viene letto anche il return man mano che vengono introdotti i dati e questo fa andare in palla la lettura, quindi a volte per rimediare a questo si usa:
    codice:
    scanf("%c%c",&invio, &carattere);
    in modo che il primo %c si "mangia" il carattere del return e non va a causare problemi nell'acquisizione!

    Apparte questo problema, c'era qualche problema nel codice, ovvero che leggi la matrice al contrario! Ovvero leggi le colonne al posto delle righe! comunque ti posto qua il codice un pò corretto, prova un pò tu, vedi se ci sono altri problemi...ciao

    codice:
    #include <stdio.h>
    #define col 50
    #define rig 30
    
    int confronto(char[][col],int);
    void stampaA ( char A[][col], int x );
    
    int main(){
    
    char A[rig][col];
    char invio;
    int i,j,x,res;
    
    printf("Dammi 1 N >0. N x N sara' la grandezza della matrice\n");
    scanf("%d",&x);
    
    //RIEMPIMENTO MATRICE
    for(j=0;j<x;j++){
    printf("Riempire la %d Riga con %d lettere\n ",j+1,x);
    for(i=0;i<x;i++)
    scanf("%c%c",&invio, &A[j][i]);
    }
    printf ("\nMatrice di caratteri:\n");
    stampaA ( A, x );
    
    res=confronto(A,x);
    
    if(res==1)printf("TRUE\n");
    else printf("FALSE\n");
    
    system ("pause");
    return 1;
    
    }
    
    int confronto(char c[rig][col],int x){
    int i,j,k,res;
    
    for(j=0;j<x;j++)
    for(i=0;i<x;i++)
    for(k=0;k<x;k++){
    if(c[i][j]!=c[k][j+1])
    res=1;
    if(c[i][j]!=c[k][j+1])
    res=0;
    }
    return res;
    }
    
    void stampaA ( char A[][col], int x ) 
    {
         int i, j;
         
         for(i=0;i<x;i++) {
            for(j=0;j<x;j++) {
                printf ("%c ", A[i][j]);
            }
         printf ("\n");
         }
         return;
    }

  6. #6
    Utente di HTML.it L'avatar di NaTEn
    Registrato dal
    Jan 2009
    Messaggi
    18
    Originariamente inviato da MrX87
    codice:
    scanf("%c",&carattere);
    c'è il problema del solito return(invio) che di per sè rappresenta un carattere(\n); per questo motivo viene letto anche il return man mano che vengono introdotti i dati e questo fa andare in palla la lettura.

    Quoto quello detto da MeX87, ma normalmente, per far fronte a questo priblema è meglio usare
    codice:
    scanf("%*c%c", carattere);
    la
    codice:
    scanf("%*c");
    non fa altro che eliminare l'ultimo carattere digitato (in questo caso il '\n'), risolvendo così il tuo problema.
    Utilizzando questo comando eviti di implementare una variabile in più inutilmente, che su un programma del genere non crea disagi, ma che è comunque un "peso" in più inutile e meno confuzione.
    Io ti consiglio di fare come ti ho detto.

    Fammi sapere

    Fabio

  7. #7
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    la codice:

    scanf("%*c");

    non fa altro che eliminare l'ultimo carattere digitato (in questo caso il '\n')
    si in verità anche io sapevo che quello era un buon metodo che evitava di fatto di dover dichiarare una variabile in più ma mi è stato detto che effettivamente potrebbe andare a scrivere in zone di memoria che non dovrebbero essere utilizzate! e se non mi sbaglio questo mi è stato detto proprio in questo forum!

  8. #8
    Utente di HTML.it L'avatar di NaTEn
    Registrato dal
    Jan 2009
    Messaggi
    18
    Originariamente inviato da MrX87
    si in verità anche io sapevo che quello era un buon metodo che evitava di fatto di dover dichiarare una variabile in più ma mi è stato detto che effettivamente potrebbe andare a scrivere in zone di memoria che non dovrebbero essere utilizzate! e se non mi sbaglio questo mi è stato detto proprio in questo forum!
    Boh.. Io l'ho sempre usata e non mi ha mai dato problemi... Anche la mia prof di corso ce la fa usare e non ci ha mai specificato che potrebbe dare problemi in quel senso (e normalmento è molto attenta a quelle cose). Ci avrebbe invece segnato come "errore" il dichiarare una variabile in più non necessaria... Poi non so..

    Si può usare anche fflush(stdin) dopo la funzione input, ma per tali comandi bisogna vedere se li avete fatti (da noi non vogliono assolutamente che usiamo cose che non siano state spiegate a lezione, perché tutti devono avere le stesse conoscenze e devono usare quelle per risolvere i problemi posti).

    Avevo anche letto che si poteva usare la scanf("%c\n"), ma sinceramente non l'ho mai testata.

    Questo è tutto quello che so..

    Fabio

  9. #9
    Utente di HTML.it L'avatar di NaTEn
    Registrato dal
    Jan 2009
    Messaggi
    18
    Ho provato col codice postato in precedenza, ma fa comunque il segmentation fault nello stesso punto...

  10. #10
    Grazie x l'aiuto ke mi state dando.
    Ho messo nel programma, lo scanf("%c%c"); e il programma carica correttamente tutti i char, ma non riesco a far funzionare la funzione, devo fare un controllo riga x riga x vedere ke nn c siano caratteri uguali in una riga rispetto alla riga successiva. Es.:

    a b c d
    e f g h
    i l m n
    o p q r

    La funz dovrebbe restituire 1 a res e dovrebbe dare TRUE xk nn c sn caratteri uguali

    a b c d
    e c b g
    i l m n
    o p q r

    La funzione dovrebbe restituire 0 a res e quindi darmi FALSE.
    Siccome mi sono accorto ke nella funzione avevo sbagliato a usare gli indici cm avevo fatto nel main prima, l'ho corretta, vi posto quello ke ho scritto e continua a nn andare pero'... :master:

    int confronto (char A[rig][col], int x) {
    int i, j, k; //Sono i miei indici
    int res;

    for (j=0;j<x;j++)
    for (i=0;i<x;i++) {
    if (A[j][i] != A[j+1][k]) res=1;
    else res=0;
    }
    return res;
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.