[RISOLTO]problema con programma in C

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
lgsalvati
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2519
Iscrizione: mercoledì 4 ottobre 2006, 12:24
Località: SALERNO

[RISOLTO]problema con programma in C

Messaggio da lgsalvati »

Salve a tutti
ho un problema con un programmino in C, in pratica vorrei che ciò che in argv[2] viene passato possa essere confrontato in modo da regolarmi di conseguenza,ma non funge in questo modo :

Codice: Seleziona tutto

int main(int argc , char *argv[]) {
if(argc!=3){
printf("errore nell'uso del programma : ./prenota <numero prodotti> <tipo prodotto>\n");
return(0);
}
char *prodotto=atoi(argv[2]);
int numprod=atoi(argv[1]);
if(numprod<30){
printf("il numero di prodotti da prenotare deve essere almeno trenta\n");
return(0);
}
int codiceprod=0;
int msqid;
int fifo;
key_t key=1000;
struct mymsgbuf{
int cornetto;
int babba;
int crostatina;
int cannolo;
}qbuf;
if(prodotto=="cornetto") codiceprod=1; 
if(prodotto=="babba") codiceprod=2;
if(prodotto=="crostatina") codiceprod=3;
if(prodotto=="cannolo") codiceprod=4;
per farlo funzionare ho dovuto passare direttamente i numeri al posto delle parole.. ma vorrei anche che funzionasse cosi..ciao e grazie a chi risp :)
Ultima modifica di lgsalvati il giovedì 27 settembre 2007, 8:54, modificato 1 volta in totale.
Avatar utente
kaosktrl
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 393
Iscrizione: giovedì 28 dicembre 2006, 17:01
Contatti:

Re: problema con programma in C

Messaggio da kaosktrl »

Ciao,

prova  a fare così:

char array[LEN];
snprintf (array, LEN, argv[2], 0);


In pratica con la snprintf stampi su stringa definendo la dimensione massima della stringa definendola all'inizio del file con:

#define LEN 256
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: problema con programma in C

Messaggio da bite »

Ma non basta fare

Codice: Seleziona tutto

char * prodotto = argv[2];
?
L'array argv dovrebbe restare sempre accessibile, quindi credo non ci sia bisogno di fare la copia.
lgsalvati
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2519
Iscrizione: mercoledì 4 ottobre 2006, 12:24
Località: SALERNO

Re: problema con programma in C

Messaggio da lgsalvati »

forse mi sono spiegato male se è cosi chiedo scusa.. ma io non ho scritto che nella variabile prodotto non ci sia il valore di argv[2].. il problema è nel confronto

Codice: Seleziona tutto

if(prodotto=="cornetto") codiceprod=1; 
if(prodotto=="babba") codiceprod=2;
if(prodotto=="crostatina") codiceprod=3;
if(prodotto=="cannolo") codiceprod=4;
non funge..forse perchè il tipo è un puntatore ad un char e viene confrontato con una stringa..
Cmq proverò la soluzione dell'array potrebbe andare bene.
grazie dei consigli. :)
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: problema con programma in C

Messaggio da paper0k »

Scusa ma qui non torna....
salvatiluig ha scritto: char *prodotto=atoi(argv[2]);
... prodotto lo definisci come char* e poi lo imposti come il valore intero del 2° argomento???
Per confrontare le char* dovresti usare la strcmp

Codice: Seleziona tutto

char *prodotto=argv[2];
...
if (strcmp(prodotto, "cornetto")==0) codiceprod=1;
;)
Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
lgsalvati
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2519
Iscrizione: mercoledì 4 ottobre 2006, 12:24
Località: SALERNO

Re: problema con programma in C

Messaggio da lgsalvati »

quell'atoi era un errore di copia perchè dopo averlo modificato usavo un numero invece che la parola..cmq bando alle ciance funziona :D
strcmp l'avevo usata ma nel mio litigare con l'inglese avevo capito che tornava un intero >0 quando il confronto era vero invece era il contrario  ::)
grazie mille
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti