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

    [C] Stampa di puntatori a char

    Buona sera... inanzi tutto ringrazio chiunque possa essermi d'aiuto..
    Dunque il problema è questo
    Dovrei inserire in una array di char delle stringhe e stamparle, ma purtroppo con ci riesco..
    codice:
    char *word[20]; 
    int main(void){ 
    int i; int j;  
    
    printf("Inizio\n");  
    printf("Inserisci una stringa\n"); 
    for(i=0;i<5;i++){ 
    scanf("%s",word); 
    }  
    printf("hai inserito:\n"); 
    for (i=0;i<5; i++){ 
    printf("\n"); 
    for (j=0; word[i][j]='\0';j++){ 
    printf("%c",word[i][j]); 
    }
    }  
    system("PAUSE");
    return 0; }
    il problema mi sorge al momento della stampa....potreste aiutarmi cortesemente... grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Quale problema sorge al momento della stampa? Ricorda che è necessario fornire sempre il maggior numero di dettagli: messaggi di errore, comportamenti inattesi, risultati errati, ecc. senza dover delegare agli altri la "scoperta" dei propri errori che già si conosco.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    Re: Moderazione

    Originariamente inviato da LeleFT
    Quale problema sorge al momento della stampa? Ricorda che è necessario fornire sempre il maggior numero di dettagli: messaggi di errore, comportamenti inattesi, risultati errati, ecc. senza dover delegare agli altri la "scoperta" dei propri errori che già si conosco.


    Ciao.
    purtroppo non ho scritto l'errore perchè il programma crasha senza dare un output specifico

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Re: Moderazione

    Originariamente inviato da anubi0086
    purtroppo non ho scritto l'errore perchè il programma crasha senza dare un output specifico
    Questo, ad esempio, è il tipo di informazione che avresti dovuto dare subito.

    Per prima cosa non hai dimensionato l'array di "stringhe" e questa è senza dubbio la causa del crash.

    Ad ogni modo, rivedrei questa parte di codice che non ha molto senso:
    codice:
    for(i=0;i<5;i++){ 
       scanf("%s",word); 
    }
    In pratica leggi 5 volte una stringa da tastiera e la butti sempre nello stesso posto... ma quel posto non è un posto adatto a contenere una stringa...

    Poi c'è da rivedere anche la condizione di uscita del for più interno nella stampa... in quel modo va avanti finchè il carattere è '\0', quindi si ferma subito (essendo che, almeno, il primo dovrebbe essere diverso).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5

    Re: Re: Moderazione

    Originariamente inviato da anubi0086
    purtroppo non ho scritto l'errore perchè il programma crasha senza dare un output specifico
    ho apportato la modifica alla dimensione e indicizzato l'inserimento nel array in questo modo :


    codice:
    int main(void){ 
    char *word[ELEM][ELEM]; 
    int i; int j;    
    printf("Inizio\n");   
    printf("Inserisci una stringa\n");  
    for(i=0;i<5;i++){  
    scanf("%s",word[i]);
    }
    printf("hai inserito:\n"); 
    for (i=0;i<5; i++){ 
    printf("\n"); 
    for (j=0; word[i][j]='\0';j++){ 
    printf("%c",word[i][j]); 
    }
    }  
    system("PAUSE");
    return 0;
    }
    ma ora quando faccio la stampa mi esce un blocco vuoto help

    HO RISOLTOOOO

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Rileggi la parte finale del mio post precedente: la condizione del for interno (quello che scorre sull'indice "j") va rivista... è al contrario. Devi proseguire finchè NON incontri il carattere '\0'.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7

    SOL

    codice:
    #include<stdio.h>  
    #include <stdlib.h> 
    #include <string.h> 
    #include<ctype.h> 
    #define ELEM 20  
    
    int main(void){  
    char *word[ELEM][ELEM]; 
    int i; int j;   
    
    for(i=0;i<ELEM;i++){     
    word[i][0]='\0';     
    } 
    
    printf("Inizio\n");   
    printf("Inserisci una stringa\n");  
    for(i=0;i<5;i++){  
    
    scanf("%s",word[i]);  
    }   
    for(i=0;i<5;i++){     
    if(word[i][0]!='\0')     
    printf("%s\n", word[i]);             
    }    
    system("PAUSE"); 
    return 0; 
    }

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Anche se come si dice in gergo "funziona" non vuol dire che sia corretto.
    La memoria va allocata !
    codice:
    char *word[ELEM][ELEM];
    Qui hai una matrice di puntatori.
    Ma sono tutti puntatori che contengono solo un indirizzo,non ci hai allocato memoria.
    Con questa matrice potresti prendere su (allocando spazio) ELEM x ELEM stringhe:
    codice:
    for(i=0;i<ELEM;i++)
        for(j=0;j<ELEM;j++)
        {
            word[i][j]=(char*)calloc(100,sizeof(char));
            fgets(word[i][j],100,stdin);
        }
    for(i=0;i<ELEM;i++)
        for(j=0;j<ELEM;j++)
            puts(word[i][j]);
    Oppure sostiusuisci la riga con:
    codice:
    char word[ELEM][ELEM];
    E prendi su le righe con scanf anche se te lo sconsiglio,meglio usare fgets.

  9. #9
    Originariamente inviato da ramy89
    Anche se come si dice in gergo "funziona" non vuol dire che sia corretto.
    La memoria va allocata !
    codice:
    char *word[ELEM][ELEM];
    Qui hai una matrice di puntatori.
    Ma sono tutti puntatori che contengono solo un indirizzo,non ci hai allocato memoria.
    Con questa matrice potresti prendere su (allocando spazio) ELEM x ELEM stringhe:
    codice:
    for(i=0;i<ELEM;i++)
        for(j=0;j<ELEM;j++)
        {
            word[i][j]=(char*)calloc(100,sizeof(char));
            fgets(word[i][j],100,stdin);
        }
    for(i=0;i<ELEM;i++)
        for(j=0;j<ELEM;j++)
            puts(word[i][j]);
    Oppure sostiusuisci la riga con:
    codice:
    char word[ELEM][ELEM];
    E prendi su le righe con scanf anche se te lo sconsiglio,meglio usare fgets.
    grazie per l'esaustiva risposta

  10. #10
    avrei un altro dubbio volendo passare il tutto ad una funzione ho provato a scrivere cosi
    codice:
    void leggi(char*[],int ); 
    int main(void){  
    char *word[ELEM][ELEM]; 
    int i; 
    int j; 
    int l; 
    for(i=0;i<ELEM;i++){     
    word[i][0]='\0';
         } 
    printf("Inizio\n"); 
    printf("Quante parole vuoi inserire?"); 
    scanf("%d",&l); 
    leggi(word,l); 
    
    system("PAUSE"); 
    return 0; }  
    
    void leggi(char *parole[],int size){ 	
    int i; printf("Inserisci una stringa\n");  
    for(i=0;i<size;i++){  
    scanf("%s",parole[i]);  }  }
    solo che mi crasha appena inserisco il primo elemento...potreste aiutarmi
    ed in più mi da questo [Warning] passing arg 1 of `leggi' from incompatible pointer type

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.