Linux Avanzato
- COM_EASYSOCIAL_GUEST_NAME
-
Autore della discussione
- 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
Grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- COM_EASYSOCIAL_GUEST_NAME
-
- 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.
*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
-
- 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.
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
-
Autore della discussione
- 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);
}
?
if(valore>4294967295) {(*val)=0;
return (-3);
}
?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- COM_EASYSOCIAL_GUEST_NAME
-
- Visitatori
-
19 Anni 6 Mesi fa #24616
da COM_EASYSOCIAL_GUEST_NAME
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)
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
-
Autore della discussione
- 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.
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.