Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106

    [C]Scansione e visualizzazione di un vett di caratteri con puntatori

    Salve a tutti sto cercando di capire i puntatori...ho un problema con questo esercizio:
    Scrivere un programma che esegua la scansione e la visualizzazione di un vettore di caratteri.
    Ho sviluppato il seguente codice
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    void gestione(void);
    int inserimento(int,char *);
    void visualizzazione(int,char *);
    main()
    {
          gestione();
          system("PAUSE");
          return(0);
    }
    
    void gestione(void)
    {
         int l;
         printf("Quanti caratteri vuoi inserire? : ");
         scanf("%d",&l);
         char str[l];
         inserimento(l,*str);
         visualizzazione(l,*str);
    }
    
    int inserimento(int l,char *car)
    {
        int i;
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c carattere : ",i+1,248);
                         scanf("%c",&car[i]);
                        }
        return(car);
    }
    
    void visualizzazione(int l,char *car)
    {
         int i;
         for(i=0;i<l;i++){
                           printf("%c",car[i]);
                           printf("---> ");
                           }
                           printf("FINE\n");
    }
    Il programma deve ricevere in ingresso dei caratteri esempio c i a o e visualizzarli così c-->i-->a-->o-->FINE
    Ma mi da i seguenti errori e non funziona
    In function `gestione':
    [Warning] passing arg 2 of `inserimento' makes pointer from integer without a cast
    [Warning] passing arg 2 of `visualizzazione' makes pointer from integer without a cast
    In function `inserimento':
    [Warning] return makes integer from pointer without a cast
    Qualche suggerimento?? Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    primo errore che ho trovato e che modifico:
    codice:
    void gestione(void)
    {
         int l;
         printf("Quanti caratteri vuoi inserire? : ");
         scanf("%d",&l);
         char str[l];
         inserimento(l,*str);<----- l'operatore * va tolto
         visualizzazione(l,*str); <----- l'operatore * va tolto
    }
    
    Quindi
    
    void gestione(void)
    {
         int l;
         printf("Quanti caratteri vuoi inserire? : ");
         scanf("%d",&l);
         char str[l];
         inserimento(l,str);
         visualizzazione(l,str);
    }
    Adesso ho un problema nell'inserimento nel senso che se metto che voglio inserire 4 caratteri mi dice:
    Inserisci il 1° carattere: Inserisci il 2° carattere: <ora posso inserire>
    Inserisci il 3° carattere: Inserisci il 4° carattere: <ora posso inserire>
    e stampa
    --->---><carattere>
    --->---><carattere>
    Mi fa saltare i primo e il terzo carattere...

    Restano questi errori:
    In function `inserimento':
    [Warning] return makes integer from pointer without a cast

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Se aggiungo un getchar dopo lo scanf mi fa inserire i caratteri correttamente
    codice:
    int inserimento(int l,char *car)
    {
        int i;
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c carattere : ",i+1,248);
                         scanf("%c",&car[i]);
                         getchar(); 
                        }
        return(car);
    }
    Il problema è che stampa solo le freccie in questo modo(in base al numero di caratteri inseriti)
    codice:
    --->
    --->
    --->
    --->
    --->
    ......
    ......
    --->
    ---> FINE
    Premi un tasto per continuare...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Così funziona ma ho dei dubbi...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    void gestione(void);
    int inserimento(int,char *);
    void visualizzazione(int,char *);
    main()
    {
          gestione();
          system("PAUSE");
          return(0);
    }
    
    void gestione(void)
    {
         int l;
         printf("Quanti caratteri vuoi inserire? : ");
         scanf("%d",&l);
         char str[l];
         inserimento(l,str);
         visualizzazione(l,str);
    }
    
    int inserimento(int l,char *car)
    {
        int i;
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c carattere : ",i+1,248);
                         scanf("%s",&car[i]); 
                         }
        return(car);
    }
    
    void visualizzazione(int l,char *car)
    {
         int i;
         for(i=0;i<l;i++){
                           printf("%c",car[i]);
                           printf("---> ");
                           }
                           printf("FINE\n");
    }
    Ho modificato lo scanf ma perchè adesso che ho messo %s funziona?? e perchè devo utilizzare & prima di car[i](Provando senza & non funziona) ? Solitamente per le stringhe non si mette l'operatore & o sbaglio??

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    La scanf prende la stringa che gli passi come argomento e ci scrive sopra.
    Ma gli serve il riferimento, cioè l' indirizzo del primo carattere della stringa.
    Altrimenti non può scrivere sulla stringa originaria che gli passi, perchè se la variabile è passata per valore, ne viene fatta una copia, e scrive la stringa presa input solo sulla variabile locale alla scanf, che non è altro che una copia della stringa che gli hai passato.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Ok grazie...un altra cosa l'errore:

    In function `inserimento':
    [Warning] return makes integer from pointer without a cast

    che significa??

  7. #7
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Che la inserimento ritorna un intero, ma gli stai facendo ritornare un puntatore a char.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    E per far si che questo warning scompaia che devo modificare nel programma??

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Se il valore di ritorno non ti serve puoi farla void:

    codice:
    void inserimento(int l,char *car)
    {
        int i;
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c carattere : ",i+1,248);
                         scanf("%s",&car[i]); 
                         }
    }
    Oppure vuoi fargli ritornare un valore?
    Dipende da cosa vuoi fare.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Se non lo faccio ritornare uscendo dalla funzione lo perdo quel valore giusto? ...invece io devo farlo ritornare per poi passarlo all'altra funzione...

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.