Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Argomenti passati alla main() dalla linea dei comandi

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto UtenteMassimoB, Foto Utentefairyvilje

0
voti

[1] Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto Utentenyky93 » 8 ott 2012, 23:00

Salve ragazzi. Ieri ho iniziato a studiare le funzioni (linguaggio C) e a quanto ho capito gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea dei comandi

Ogni qualvolta si vuole dare da terminale gli argomenti è sufficiente che la sua definizione contenga un numero e un vettore, che indicano rispettivamente il numero totali di voci nella linea di comando e una lista che contiene puntatori che puntano alle locazioni di memoria in cui vengono inserite le stringhe, esatto?

Ora ciò che non ho capito è quale sia l'utilità di dare gli argomenti da terminale? Cioè, se io volessi dare l'eseguibile a un mio amico, come fa lui a sapere quanti argomenti bisogna introdurre affinche il programma giri correttamente?

Vi faccio queste domande perché sul libro di programmazione sul quale ho iniziato a studiare non ne parla affato dell'argomento e sul web per il momento non sono riuscito a trovare nulla che abbia risolto completamente i miei dubbi
Avatar utente
Foto Utentenyky93
130 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 174
Iscritto il: 2 ago 2012, 20:49

0
voti

[2] Re: Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto UtenteTardoFreak » 8 ott 2012, 23:03

Hai mai scritto un programma che interpreta esegue comandi inviati da terminale/consolle?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,4k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15764
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto Utentenyky93 » 8 ott 2012, 23:55

Ok, in parte ho risolto! Praticamente devo avvertire io l'utente che ha sbagliato ad inserire il numero di argomenti (e nel caso in cui ne sia ignaro lo devo avvertire che deve inserire lui gli argomenti). Ad esempio

Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double func(double x);

main(int argc, char *argv[]){

if (argc != 2) {
    fprintf(stderr,"\n Errore inserimento dati / x\n\n ");
    return(EXIT_FAILURE);
    }
double y,x0;
x0=atof(argv[1]);
y=func(x0);
printf("\n il quadrato di %1.0lf è %1.0lf\n\n",x0,y);
}

double func(double x){
  return x*x;
  }


Ora, cosa cambia nel dare gli argomenti da terminale anzichè ad esempio tramite scanf all'interno della main?
Avatar utente
Foto Utentenyky93
130 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 174
Iscritto il: 2 ago 2012, 20:49

2
voti

[4] Re: Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto Utentephylum » 9 ott 2012, 0:06

tutto e niente, dipende da quello che vuoi fare :)

in linea generale che il passaggio di parametri da riga di comando permette l'esecuzione batch o comunque non interattiva con scan & company serve l'omino* che prema invio, oltre a questo tanto la riga di comando che scan hanno dei limiti sulla lunghezza della stringa da leggere, infine scan sa anche interpretare e convertire quello che legge
\int_{}tella
Immagine
Avatar utente
Foto Utentephylum
6.186 5 7 12
G.Master EY
G.Master EY
 
Messaggi: 3217
Iscritto il: 9 ott 2007, 12:40

0
voti

[5] Re: Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto Utentenyky93 » 9 ott 2012, 0:13

Ok, quindi dipende da ciò che il programma deve fare. Allora non ci sono differenze sostanziali che riguardano magari le locazioni di memoria o altro che può rendere il programma più funzionale, se non quello di rendere più fluida l'esecuzione del programma in base al suo scopo?
Avatar utente
Foto Utentenyky93
130 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 174
Iscritto il: 2 ago 2012, 20:49

3
voti

[6] Re: Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto Utentephylum » 9 ott 2012, 0:27

provo spiegarmi con un esempio pratico:

scenario1:
data una collezione di mp3 bisogna convertirli in wav o viceversa - in questo scenario un programma da riga di comando è preferibile e diventa possibile iterare su intere directory senza che il programma lo sappia o sia previsto nel codice

scenario2: bisogna effettuare un sondaggio visualizzando delle domande e ottenendo le risposte - qui è preferibile scan & co.

memoria/locazioni/funzionalità - l'ho già spiegato prima ma aggiungo:
la riga di comando ti offre un array in cui il primo elemento è generalmente il programma stesso (dipende dal s.o.) e la possibilità di ricevere un numero variabile di parametri dipendente dal s.o., scan invece legge una riga (la cui dimensione è limitata) e può applicarci sopra dei 'filtri' (accetta le stesse opzioni di print) il che ti da la possibilità di leggere piu' valori in un 'colpo solo' e memorizzarli in variaibli appropriate - questo se l'utente si comporta bene....
\int_{}tella
Immagine
Avatar utente
Foto Utentephylum
6.186 5 7 12
G.Master EY
G.Master EY
 
Messaggi: 3217
Iscritto il: 9 ott 2007, 12:40

0
voti

[7] Re: Argomenti passati alla main() dalla linea dei comandi

Messaggioda Foto Utentenyky93 » 9 ott 2012, 0:33

Perfetto! :D Sei stato chiarissimo. Ti ringrazio
Avatar utente
Foto Utentenyky93
130 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 174
Iscritto il: 2 ago 2012, 20:49


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti