Visualizzazione dei risultati da 1 a 5 su 5

Discussione: problema in calc.c

  1. #1
    Utente di HTML.it L'avatar di shot
    Registrato dal
    Jun 2002
    Messaggi
    4

    problema in calc.c

    Salve a tutti sto cercando di imparare il C, sono arrivato allargometo dei parametri di main(): argc e *argv[].
    Volevo scrivere una specie di calcolatrice che dato il comando
    per esempio calc 12 + 5, mi restiuisse 17 oppure (* - o /) il problema è che il codice che ho scritto anche se viene compilato e nn va in segmentation fault (da linux) non funziona, potreste darmi una mano? ecco il codice:


    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    int main (int argc, char *argv[]){
    int c,s,t;
    if (argc!=4){
    printf ("ERRORE immettere più o meno valori o 1 segno");
    exit (1);
    }
    else{
    if(argv[2]=="+"){
    printf ("%d\n",atoi(argv[2]));
    s=atoi(argv[1]);
    t=atoi(argv[3]);
    c=s+t;
    printf ("%d\n",s);
    printf ("%d\n",c);
    exit(0);
    }
    if(argv[2]=="-"){
    s=atoi(argv[1]) ;
    t=atoi(argv[3]);
    c=s-t;
    printf ("%d\n",c);
    exit (0);
    }
    if (argv[2]=="*"){
    s=atoi(argv[1]);
    t=atoi(argv[3]);
    c=s*t;
    printf ("%d\n",c);
    exit(0);
    }
    if(argv[2]=="/"){
    s=atoi(argv[1]);
    t=atoi(argv[3]);
    c=s/t;
    printf ("%d\n",c);
    exit (0);
    }
    }
    }



    come mai nn funziona????
    La fortuna aiuta le menti preparate!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    ho letto il codice un po velocemente cmq prova a fare cosi
    if (variabile=='+')
    prova magari va :>

  3. #3

    bho..

    sositutire tutte le condizioni
    negli if usando strcmp()
    if(argv[2]=="+")--->if(!strcmp(argv[2],"+")
    idem per le altree.
    Buon natale

  4. #4
    Utente di HTML.it L'avatar di ChReAn
    Registrato dal
    Aug 2002
    Messaggi
    486
    Così funziona.
    Ho anche ripulito un po' il codice, sostituendo gli if con uno switch ed eliminando l'else. Infatti se il primo if è soddisfatto il programma chiama exit e termina, e quindi l'else era inutile.
    Scrivendo switch (*argv[2]) fai un controllo sul primo carattere della stringa contenuta in argv[2], o per meglio dire sulla stringa puntata da argv[2]. L'errore che facevi era quello di confrontare due stringhe tramite l'operatore ==. In C questo non è possibile in quanto ogni stringa è in realtà un puntatore a una zona di memoria, e quindi è impossibile che un'uguaglianza fra due stringhe risulti vera, a meno che non puntino alla stessa locazione di memoria.


    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>

    int main (int argc, char *argv[]){
    int c,s,t;
    if (argc!=4){
    printf ("ERRORE immettere più o meno valori o 1 segno\n");
    exit (1);
    }
    switch (*argv[2])
    {
    case '+':
    s=atoi(argv[1]);
    t=atoi(argv[3]);
    c=s+t;
    printf ("%d\n",c);
    break;
    case '-':
    s=atoi(argv[1]) ;
    t=atoi(argv[3]);
    c=s-t;
    printf ("%d\n",c);
    break;
    case '*':
    s=atoi(argv[1]);
    t=atoi(argv[3]);
    c=s*t;
    printf ("%d\n",c);
    break;
    case '/':
    s=atoi(argv[1]);
    t=atoi(argv[3]);
    c=s/t;
    printf ("%d\n",c);
    break;
    }
    }
    ChReAn
    -------------------

    Slackware 9.1 powered

  5. #5
    Utente di HTML.it L'avatar di shot
    Registrato dal
    Jun 2002
    Messaggi
    4
    Grazie a tutti funziona alla grande
    La fortuna aiuta le menti preparate!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.