Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] problema parametri da riga di comando

    Ciao ragazzi, ho dei problemi a passare dei valori da riga di comando. Mi spiego, dovrei fare una sorta di calcolatrice su riga di comando, devo digitare 12 operatore 12 e deve tornarmi un risultato.
    Il fatto è che non vuole fare quello che dico io.
    ho usato degli if con delle condizioni del tipo if argv[2] (secondo parametro?) è uguale a '+' somma, se è uguale a meno...

    dove sbaglio?

    vi posto il codice, premetto che è il primo prog C che faccio

    /*
    *
    * esercizio 1 - arith valore1 operatore valore2
    *
    */

    codice:
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    
    int main (int argc, char **argv) {
      int num1, num2, num3;
    		float ris;
    		char op;
    				
    	if (argc = 3) {
    				
    	num1 = atoi(argv[1]);
    	num2 = atoi(argv[3]);
    	num3 = atoi(argv[2]);
    	op = (char)num3;
    
    	printf("\n\n L'operazione che hai richiesto è %d %c %d \n\n\n", num1, argv[2], num2);
    
    	if (op=='+'){
    		ris = num1 + num2;
    	}
    	if (op=='-'){
    		ris = num1 - num2;
    	}
    	if (op=='*'){
    		ris = num1 * num2;
    	}
    	if (op=='/' && num2!=0){
    		ris = num1 / num2;
    		}
    	  else{
    			printf("Non si può fare una divisione per 0!!!");
    		}
    	if (op=='&'){
    		ris = num1 % num2;
    	}
    		}
    
    	//if (argc = 2) {
    	 
    	 //num2 = atoi(argv[2]);	
    	
    	//if (argv[2]=='sqr'){
    		  //ris = num2 * num2;
    		//}
    		//if (argv[2]=='sqrt' && num2!=0){
    	  //ris = sqrt(num2);
    	//	}
    			
           	//if (argc != 2 && argc != 3) {
    	  //perror("Numero parametri errato");
    		//exit(0);
    		//}
    	
    	//printf("Il risultato dell'operazione è %lf\n\n", ris);	
    	//exit(0);
    	//	}	
    }
    ciao grazie
    www.zukimania.org

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    num1 = atoi(argv[0]);
    il primo elemento di un array sta in posizione 0

  3. #3
    ok, non è quello il problema...

    ho argv[2] che sarebbe il terzo parametro passato sulla riga di comando e volgio vederlo come come un char per poi poterlo confrontare con altri char.
    facendo:
    char op;
    op = argv[2]; da errore
    e anche facenbdo:
    op = (char)argv[2]; non va
    come lo riclvo?
    www.zukimania.org

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    se argv é un char**, argv[1] é un char* dunque
    op = argv[2][0]

  5. #5
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    prova con questa...
    codice:
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main (int argc, char **argv) {
      int num1, num2, num3;
       float ris;
       char *op;
    	
      op =(char *)malloc(sizeof(char));
    if (argc = 3) {
      
    	
       num1 = atoi(argv[1]);
       num2 = atoi(argv[3]); 
       strcpy(op, argv[2]);
       
    
    printf("\n\n L'operazione che hai richiesto e %d %s %d \n\n\n", num1, op, num2);
    
    if (strcmp(op,"+") == 0){
    	ris = num1 + num2;
    }
    if (strcmp(op,"-") == 0){
    	ris = num1 - num2;
    }
    if (strcmp(op,"*") == 0){
    	ris = num1 * num2;
    }
    if ((strcmp(op,"/") == 0) && num2!=0){
    	ris = num1 / num2;
    }
    if (strcmp(op,"%") == 0){
    	ris = num1 % num2;
    }
    }
    printf("Il risultato dell'operazione e %.2f\n\n", ris);
    return(0);
    }
    il problema che se assegni direttamente argv[2][0] a un tipo di dato int o char e fai il cast ci possono essere problemi di compatibilità...
    allora prova con il ricopiarti tutta la stringa "op" e confrontarla sempre con le strighe "+","-"...etc...
    naturalmente devi fare il malloc della stringa, anche se è di un solo carattere, altrimenti ti potrebbe dare segmentation fault...

    cosi funzica...
    ciao ciao
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  6. #6
    (per conto di simoneudine)

    ok, il problema ora è un altro, il resto sembra funzionare, abbiomo usato un codice differente...

    io devo usare anche il carattere "*" che nella shell di linux ha una funzione specifica. Come faccio a dirgli considerala come parte del prog e non come comando della shell (magari l'ho chiesto nella zona sbagliata...) ciao grazie
    il mio sito dedicato agli scooter

  7. #7
    Originariamente inviato da byaur
    prova con questa...
    codice:
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main (int argc, char **argv) {
      int num1, num2, num3;
       float ris;
       char *op;
    	
      op =(char *)malloc(sizeof(char));
    if (argc = 3) {	
       num1 = atoi(argv[1]);
       num2 = atoi(argv[3]); 
       strcpy(op, argv[2]);
       
    printf("\n\n L'operazione che hai richiesto e %d %s %d \n\n\n", num1, op, num2);
    
    if (strcmp(op,"+") == 0){
    	ris = num1 + num2;
    }
    if (strcmp(op,"-") == 0){
    	ris = num1 - num2;
    }
    if (strcmp(op,"*") == 0){
    	ris = num1 * num2;
    }
    if ((strcmp(op,"/") == 0) && num2!=0){
    	ris = num1 / num2;
    }
    if (strcmp(op,"%") == 0){
    	ris = num1 % num2;
    }
    }
    printf("Il risultato dell'operazione e %.2f\n\n", ris);
    return(0);
    }
    cosi funzica...
    ciao ciao
    Ho provato il codice e non mi sembra che funz per la moltiplicazione, e se invece voglio usare per il modulo "&" al posto di "%" non funziona. Il problema è che * e & vengono interpretati dalla shell e quindi nel caso di "*", viene passato l'elenco dei files presenti nella directory non il carattere '*'.


  8. #8

    errore

    l'istruzione
    codice:
    if(argv[1]=3)
    nn è 1 test ma 1 assegnazione
    "=" assegnazione
    "==" confronto
    quindi
    codice:
    if(argv[1]==3)
    è corretto

  9. #9

    errore

    l'istruzione
    codice:
    if(argc=3)
    nn è 1 test ma 1 assegnazione
    "=" assegnazione
    "==" confronto
    quindi
    codice:
    if(argc==3)
    è corretto

  10. #10
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061

    Re: errore

    Originariamente inviato da hmesfet
    l'istruzione
    codice:
    if(argc=3)
    nn è 1 test ma 1 assegnazione
    "=" assegnazione
    "==" confronto
    quindi
    codice:
    if(argc==3)
    è corretto
    vabbè non c'è bisogno che lo dici 2 volte...
    non sono mica imbessscccille che non vedo che argc=3 è un'assegnazione e non un confronto...
    è un errore di digitazione, kè ne dici compà??? VVoVe: VVoVe:
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

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.