fbpx
Skip to main content

Linux Avanzato

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME Autore della discussione
  • Visitatori
  • Visitatori
19 Anni 6 Mesi fa #24575 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato
Puoi srivere qui brevemente come si poteva fare la conversione senza la atoi()?
Grazie

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
19 Anni 6 Mesi fa #24598 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato
La parte della conversione char -> int l'ho fatta con una serie di if/else if così (non mi ricordo bene numeri di errore che doveva restituire):

*num = 0;
for(pos = 0; pos<lungStringa; ++pos) {
*num *=10;
if(*(stringa+pos) == '0') {
*num += 0;
}
else if(*(stringa+pos) == '1') {
*num += 1;
}
else if(*(stringa+pos) == '2') {
*num += 2;
}
else if(*(stringa+pos) == '3') {
*num += 3;
}
else if(*(stringa+pos) == '4') {
*num += 4;
}
else if(*(stringa+pos) == '5') {
*num += 5;
}
else if(*(stringa+pos) == '6') {
*num += 6;
}
else if(*(stringa+pos) == '7') {
*num += 7;
}
else if(*(stringa+pos) == '8') {
*num += 8;
}
else if(*(stringa+pos) == '9') {
*num += 9;
}
else {
printf("La stringa contiene un non-numero\n");
*num = 0;
return -3;
}
}

Naturalmente prima ho controllato la lunghezza della stringa , se era maggiore di 10 mi fermo subito.
Dopo aver creato il numero ho controllato che il numero non andasse il overflow. Tale controllo l'ho fatto rianallizando la stringa di partenza:

if(lungStringa == 10) {
if(*stringa > '4') {
printf("%d\t\toverflow\n", *num);
*num = 0;
return -1;
}
else if(*stringa == '4') {
if(*(stringa+1) > '2') {
printf("%d\t\toverflow\n", *num);
*num = 0;
return -1;
}
else if(*stringa == '2') {
...
...
...
...
...
}
}
}

Magari ci sono metodi migliori per fare l'ultimo controllo, ma non me ne sono venuti altri in mente.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
19 Anni 6 Mesi fa #24602 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato
oggi sono andato da bovet per fare la prova orale e fortunatamente me l'ha fatta fare alle 15:00 (ha deciso al volo).

dopo la prova ho chiesto come dovete fare voi per quanto riguarda la prova di laboratorio e la prova orale.

chi deve fare la prova di laboratorio > dovreste mandargli una mail in cui vi prenotate; dice che gli sono arrivate 3 richieste e aspetta che gliene arrivino abbastanza per fissare una data. ha anche detto che lui non può aspettare all'infinito quindi chi non si prenota verrà probabilmente rimandato a settembre.

chi deve fare la prova orale > ha detto che scriverà sul sito data e ora ma io vi esorto a farvi sentire, mandategli una mail in cui chiedete quando ha deciso di farvi l'orale.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME Autore della discussione
  • Visitatori
  • Visitatori
19 Anni 6 Mesi fa #24611 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato
Scusa deat, ma una volta convertita la stringa in numero non potevi controllare solamente se

if(valore>4294967295) {(*val)=0;
return (-3);
}
?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
19 Anni 6 Mesi fa #24616 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato

Scusa deat, ma una volta convertita la stringa in numero non potevi controllare solamente se

if(valore>4294967295) {(*val)=0;
return (-3);
}
?


no, perchè quello è il valore massimo, dopo di che se ad esempio ci sommi 1 viene 0, quindi comincia a ciclare, quindi qualsasi numero (ad esempio 10^100) sarà sempre minore o uguale a quel numero. Sper di essempi spiegato, comuque prova a fare un programma in cui sommi a 4123456789 1234567890 e poi stampa il risulato (ricordati di usare gli unsiged int e %u nella printf)

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME Autore della discussione
  • Visitatori
  • Visitatori
19 Anni 6 Mesi fa #24619 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic Linux Avanzato
Ok, ho capito quello che dici tu, ma se scrivo:

if(valore>429496729 4 ) {(*val)=0;
return (-3);
}
in modo tale che 10^100 lo considera...
Correggimi se sbaglio.

Si prega Accedi o Crea un account a partecipare alla conversazione.