Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20

Discussione: [C] linea di comando

  1. #1

    linea di comando

    Buon pomeriggio a tutto il forum! :gren:

    Avendo capito a grandi linee il concetto della linea di comando, non riesco ancora a comprendere come il programma da me scritto in C, riesce a riconoscere i parametri e il numero di parametri della linea se non gli vengono specificati.
    E' possibile avere un esempio chiarificatore????

    grazie, Bettina.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    40
    sia questo il tuo programma:
    codice:
    int main(int argc, char** argv)
    {
        while (argc-- > 0)
        {
            printf("Parametro %d = %s\n", argc, argv[argc]);
        }
    }
    il sistema operativo si occupa di spezzare la tua linea di comando in tanti tokens e di passarteli in argv, mentre argc contiene il numero totale di questi tokens (i token sono delimitati da spazi).

    il primo token (lo ZERO) è sempre il nome del tuo programma eseguibile: quindi se argc è uguale a UNO allora non ci sono parametri alla linea di comando.

    Chiaro?

  3. #3
    ...Terrible warlords, good warlords, and an english song

  4. #4
    Originariamente inviato da mildred
    sia questo il tuo programma:
    codice:
    int main(int argc, char** argv)
    {
        while (argc-- > 0)
        {
            printf("Parametro %d = %s\n", argc, argv[argc]);
        }
    }
    Senza un asterisco

  5. #5
    Correggo, funziona lo stesso..

    Io uso sempre

    int main(int nstring, char *stringhe[])


    Scusate

  6. #6

    grazie per le risposte; ancora un aiutino!!!

    mi siete stati di grande aiuto.

    Sapreste anche dirmi qualcosa sulla fscanf?
    Che formattazione deve avere un file per essere letto dalla fscanf? Quali sono gli argomenti della fscanf?

    Per esempio se ho un file di testo con due colonne con dei numeri e le colonne sono distanziate tramite il tasto di tabulazione, come faccio a specificare il formato in fscanf?

    Il programma che io ho scritto per l'apertura e lettura di un file mi da un errore in fase di esecuzione e non mi da l'output richiesto.


    #include <stdio.h>

    main()
    {
    FILE *fp;
    char *s;
    int i;

    if((fp = fopen("infile.txt","r")) == NULL)
    printf("errore");
    else
    {
    fscanf(fp,"%s",s);
    printf("%s",*s);
    }
    fclose(fp);
    }


    Grazie ancora, conto su di voi! Bettina

  7. #7
    Nel tuo codice ci sono 3 errori:

    1)la funzione principale main() se non specificato
    nulla (come nel tuo codice) deve restituire un valore di tipo int.
    Quindi alla fine del programma devi inserire
    return (qualcosa); <-- (se il programa non causa errori)

    return(0);

    OPPURE dichiari main() di tipo void (void non restituisce valori)
    e quindi alla fine non richiede il return qualcosa);

    void main()




    2)if((fp = fopen("c:\\documenti\\prova.txt","r")) == NULL)
    non apre il file prova.txt ma si limita soltanto a verificare
    se il file esiste QUINDI
    non puoi alla fine del tuo codice chiudere il file!!!
    se non lo hai prima aperto

    un esempio corretto sarebbe stato questo:
    codice:
    if((fp=fopen("c:\\documenti\\prova.txt","r"))==NULL)     
        printf("Impossibile trovare\nil file specificato nel patch\n"); 
    else{
        fp=fopen("c:\\documenti\\prova.txt", "r"); //ORA lo apro
        //leggo il file...    
        fclose(fp); //e all'interno dell'ELSE lo chiudo!!!
        } 
    }
    3)al puntatore s devi passargli un indirizzo
    e tu non lo fai!!!
    Nel tuo esempio devi dichiarare una variabile di tipo char[100]
    e far puntare s al primo elemento dell'array char[100]

    così:
    codice:
    #include <stdio.h> 
    
    void main(){ 
        FILE *fp; 
        char *s, stringa[500]; 
        
        s=stringa; //ora s punta al primo elemento di stringa (s=stringa[0]) 
    
        if((fp = fopen("c:\\documenti\\prova.txt","r")) == NULL)  
            printf("Impossibile trovare\nil file specificato nel patch\n"); 
        else{
    	fp = fopen("c:\\documenti\\prova.txt", "r"); 
            fscanf(fp,"%s",s); 
            printf("%s",s);
    	fclose(fp);
        } 
    }
    N.B. La funzione fscanf()
    funzona come scanf() tranne per il fatto che legge
    le informazioni dallo stream specificato (nel tuo caso il file .txt)
    invece che dallo standard-INPUT (la tastiera).

    Per quello che cerchi di fare tu non va bene

    in quanto sia scanf() che fscanf() leggono una stringa fin quando
    non trovano uno spazio es: se la stringa da leggere
    è "PIPPO PAPERINO"

    con scanf() e fscanf() leggi soltanto "PIPPO"
    ...Terrible warlords, good warlords, and an english song

  8. #8
    Per leggere una stringa che presenta degli spazi o tabulazioni
    al suo interno es: "PIPPO PAPERINO" devi utilizzare la funzione

    fgets()

    sostituisci nel codice che ti ho postato

    fscanf(fp,"%s",s);

    con

    fgets(s, 500, fp);

    //500 è la lunghezza della stringa a cui punta s
    //se lo sostituisci con 10 ti legge soltanto i primi 10 caratteri
    //della stringa.
    ...Terrible warlords, good warlords, and an english song

  9. #9
    Heilà Johnny_Depp!


    ...
    2)if((fp = fopen("c:\\documenti\\prova.txt","r")) == NULL)
    non apre il file prova.txt ma si limita soltanto a verificare se il file esiste QUINDI non puoi alla fine del tuo codice chiudere il file!!! se non lo hai prima aperto
    ...
    Sicuro?

    ...
    codice:
    if((fp=fopen("c:\\documenti\\prova.txt","r"))==NULL)     
        printf("Impossibile trovare\nil file specificato nel patch\n"); 
    else{
        fp=fopen("c:\\documenti\\prova.txt", "r"); //ORA lo apro
        //leggo il file...    
        fclose(fp); //e all'interno dell'ELSE lo chiudo!!!
        } 
    }
    ...
    questo non dà errori evidenti, ma "mangia" un pochina di memoria perché la prima fopen alloca qualcosa per i cursori nel file (poco, ok) che viene riallocato da un'altra parte alla seconda chiamata di fopen, sovrascrivendo fp, cioè il puntatore all'area di memoria in precedenza allocata.


    HTH
    Che il pelo cresca sempre fluente sui vostri piedi
    Bilbo
    Visita il sito della Società Tolkieniana Italiana

  10. #10
    Hai ragione!!!

    così è corretto
    codice:
    ..........
    ..........
        if((fp = fopen("c:\\documenti\\provaas.txt","r")) == NULL){
    	fclose(fp);
            printf("Errore!!! impossibile trovare\nil file specificato nel patch\n\n");
        }	
        else{
    	fgets(s, 500, fp);
    	printf("%s\n",s);
    	fclose(fp);
        } 
    ..........
    ..........
    ...Terrible warlords, good warlords, and an english song

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.