Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] - Leggere dalla riga di comando e convertire in esadecimale

    Ciao! Sto creando un'applicazione che mi permetta di convertire un numero decimale in un numero esadecimale. Ho usato questo codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      printf("%x \n \n",argc);
      system("pause");	
    }
    Se non gli do alcun parametro, mi restuisce 1.
    Poi ho provato a dargli l'argomento "205" ma mi restituisce 2 anzichè "CD".

    In cosa sbaglio?


  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] - Leggere dalla riga di comando e convertire in esadecimale

    Originariamente inviato da CGiuseppe
    In cosa sbaglio?
    Nel fatto che non hai compreso il significato e l'utilizzo di argc/argv.

    argc contiene il numero di parametri presenti nell'array di stringhe in argv.
    argv è un array di puntatori a char, in pratica un array di stringhe.

    Se il tuo programma si chiama prova.exe e tu lo lanci con

    prova.exe pippo pluto 123

    allora:
    - in argc avrai il valore 4
    - in argv avrai 4 stringhe:
    argv[0] ---> "prova.exe"
    argv[1] ---> "pippo"
    argv[2] ---> "pluto"
    argv[3] ---> "123"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Adesso usando questo codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      printf("%x \n \n",argv[1]);
      system("pause");	
    }
    Quando scrivo un qualsiasi numero mi restituisce: "3d2446". Perchè?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' in quel modo stai visualizzando il valore del puntatore dell'elemento 1 dell'array argv.

    Semmai devi scrivere

    printf("%X \n\n", atoi(argv[1]));

    e devi fare attenzione al fatto che l'argomento sia valido ...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da CGiuseppe
    Quando scrivo un qualsiasi numero mi restituisce: "3d2446". Perchè?
    Segui il consiglio di oregon, che mi ha battuto sul tempo.

    atoi() è una funzione di libreria che data una stringa in input es. "123", la converte in un valore numero, es. 123.

    Inoltre presta attenzione all'uso di argc. Se al tuo programma non passi alcun parametro, argc vale 1 e argv[1] non esiste, non è un valore valido. Quindi devi prima di tutto testare che argc sia almeno 2.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Inoltre presta attenzione all'uso di argc. Se al tuo programma non passi alcun parametro, argc vale 1 e argv[1] non esiste, non è un valore valido. Quindi devi prima di tutto testare che argc sia almeno 2.
    In pratica devi fare questo controllo
    codice:
    if(argc < 2){
       printf("Necessita un argomento");
       exit(EXIT_FAILURE);
    }

  7. #7
    In poche parole atoi dovrebbe are questo?

    int i = 0;

    int foo (char *st)
    {
    while (*st != '\0')
    {
    *st = *st - '0';
    i++;
    }

    i --;

    int app, j, m = 1;
    for (j = i; j > 0; j++)
    {
    app += st[i];
    m*=10;
    }
    return m;
    }

    sbaglio?
    Experience is what you get when you don’t get what you want

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... sì, ci sono degli errori ... e' "grave" soprattutto questo

    *st = *st - '0';

    che modifica la stringa di partenza ...

    Piuttosto penserei a questo

    codice:
    int foo (char *st)
    {
       int l, res=0;
       for(l=0; *(st+l); l++)
       {
         res *= 10;
         res += *(st+l)-'0';
       }
    
       return res;
    }
    escludendo ovviamente il codice di controllo del contenuto della stringa (dando per scontato che la stringa sia una sequenza di cifre ...).

    P.S. Pero' la scrittura di una atoi personalizzata e' OT in questo caso ...

  9. #9
    E' vero ... Grazie
    Experience is what you get when you don’t get what you want

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.