View Full Version : [C] argv e caratteri speciali
diadhuit
09-06-2005, 14:52
Ciao!
Io dovrei fare un programmino che, passando da shell i numeri e l'operando, svolga l'operazione. Il problema è che facendo 3 & 5 (per il modulo), lui considera 5 un nuovo comando di shell! Come devo fare?
RaouL_BennetH
09-06-2005, 15:00
non vorrei sbagliare, ma l'operando per l'operazione modulo non è "%" ?!?
Poi, hai gestito la funzione main in modo che possa accettare parametri da riga di comando?
DanieleC88
09-06-2005, 15:27
non vorrei sbagliare, ma l'operando per l'operazione modulo non è "%" ?!?
Infatti non sbagli. Ora la domanda è: diadhuit, ma che ca**o vuoi fare? Scusami, ma proprio non ho capito cosa intendi. Spiegati meglio e proverò ad aiutarti.
Marinelli
09-06-2005, 17:29
Ma scusa... tu attraverso riga di comando passi solamente gli operandi... il calcolo del resto lo puoi fare all'interno del programma. Ricordati comunque che i parametri contenuti in argv sono stringhe e quindi devi convertirli in interi se vuoi farci operazioni sopra (ad esempio con la funzione atoi).
Ciao
beppegrillo
09-06-2005, 17:37
Infatti non sbagli. Ora la domanda è: diadhuit, ma che ca**o vuoi fare? Scusami, ma proprio non ho capito cosa intendi. Spiegati meglio e proverò ad aiutarti.
Vuole che il programma accetti come argomenti : operando operatore operando ed elaborando questi parametri restituisca il risultato.
DanieleC88
09-06-2005, 17:44
Ah, ora capisco. Be', in tal caso devi verificare gli argomenti uno alla volta e convertire in numeri quelli che ti interessano.
Ah, ora capisco. Be', in tal caso devi verificare gli argomenti uno alla volta e convertire in numeri quelli che ti interessano.
Si, pero' prima deve evitare che la shell interpreti quello che immette da riga di comando... Non so se le virgloette sono sufficienti... immagino che dando un comando tipo
$ ./calcola "27 * 3", quello passato venga preso come un singolo argomento di tipo *char anziche' come 3 diversi argomenti (operando,operatore,operando). Sbaglio? Con la shell sto messo un po' male...
Gica
Si, pero' prima deve evitare che la shell interpreti quello che immette da riga di comando... Non so se le virgloette sono sufficienti... immagino che dando un comando tipo
$ ./calcola "27 * 3", quello passato venga preso come un singolo argomento di tipo *char anziche' come 3 diversi argomenti (operando,operatore,operando). Sbaglio? Con la shell sto messo un po' male...
Gica
Meglio ancora... se devi inserire caratteri speciali come parametri di un programma, basta usare il carattere di escape (\), si chiama cosi', no? Me ne ero dimenticato...
Ora, chiarito il fatto che l'operatore modulo di e' '%' e non '&', se anche per qualche motivo dovessi passare il carattere '&' come argomento, basta farlo precedere dal carattere '\'. Dico bene o dico giusto? :D
Ciao
DanieleC88
10-06-2005, 15:06
Gica, c'hai preso in pieno. Ora la domanda è: qual'è la shell? Se sta utilizzando Linux, allora è probabile che sia BASH, quindi basterebbe il carattere di escape. Con altri sistemi non saprei/non ricordo.
DanieleC88
10-06-2005, 15:08
[...] un singolo argomento di tipo *char anziche' come 3 diversi argomenti [...]
Ah, intendevi forse char *? :D
Ah, intendevi forse char *? :D
Esatto... :) E dire che avevo seguito un po' anche quella tua famosa discussione su dove mettere l'asterisco nelle dichiarazioni. Di tutti i posti possibili, io l'ho messo dove proprio non va! :doh:
Riguardo al carattere di escape: giusta osservazione! Ho dato per scontato che stesse usando bash e Linux... :muro:
Gica
DanieleC88
10-06-2005, 16:52
Esatto... :) E dire che avevo seguito un po' anche quella tua famosa discussione su dove mettere l'asterisco nelle dichiarazioni. Di tutti i posti possibili, io l'ho messo dove proprio non va! :doh:
È strano che quella discussione abbia avuto successo. Sicuramente è stato l'intervento di fek a renderla interessante. Quell'uomo è un mito. ;)
Riguardo al carattere di escape: giusta osservazione! Ho dato per scontato che stesse usando bash e Linux... :muro:
Se usi Linux è normale, BASH è di una comodità straordinaria.
diadhuit
10-06-2005, 17:44
Grazie :) !!!
Sì, scusate, uso Linux. Cmq:
1) Causa stordimento del prof mi tocca fargli passare 3 & 5 e poi dirgli che faccia 3 % 5 (Meglio non commentare...)
2)Purtroppo il testo dell'esercizio chiede di fare attenzione ai caratteri che "hanno un significato speciale per la shell" (Parole testuali. Io non capisco... credo che quindi il backslash o le virgolette non vadano bene, ma non so.)
Grazie :) !!!
Sì, scusate, uso Linux. Cmq:
1) Causa stordimento del prof mi tocca fargli passare 3 & 5 e poi dirgli che faccia 3 % 5 (Meglio non commentare...)
2)Purtroppo il testo dell'esercizio chiede di fare attenzione ai caratteri che "hanno un significato speciale per la shell" (Parole testuali. Io non capisco... credo che quindi il backslash o le virgolette non vadano bene, ma non so.)
:what: se cosi' fosse, quell' & e' messo li apposta per creare casini e farti trovare il modo di risolvere il problema... Non saprei. Se operatori e operandi li devi passare per forza da riga di comando, oltre all' uso del backslash non saprei cosa suggerire... Se mi viene in mente qualcosa, ti fo sapere. Chissa', magari e' una cavolata, ma al momento non mi sovviene... :boh:
Gica
Ziosilvio
10-06-2005, 21:46
il testo dell'esercizio chiede di fare attenzione ai caratteri che "hanno un significato speciale per la shell" (Parole testuali. Io non capisco... credo che quindi il backslash o le virgolette non vadano bene, ma non so.)
Infatti: caratteri come backslash, ampersand ("e" commerciale, Shift+6 sulla tastiera italiana) e simili, nonché sequenze particolari (come "&&") non vengono interpretati dalla shell come parametri da passare al programma chiamato.
Un modo per dire alla shell di non fare questa distinzione, è farli precedere da un backslash: perciò "\&" per passare un ampersand, "\\" per passare un backslash, ecc.
Solo che questo devi farlo tu in fase di input.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.