|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 24
|
[C] Programma in C simile all'ATOI
Questo programma dovrebbe svolgere una funzione simile all'ATOI, quindi prende un stringa di numeri e la trasforma in intero! Il fatto è che non accetta la stringa, mi da errore come se leggesse dei caratteri! Sapete aiutarmi?
#include<stdio.h> int potenza(int); int main() { char s[101],c; int i=0,in=0,j,p,aux,end; /*Inserimento stringa*/ printf("Inserisci stringa: "); while((c=getchar()!='\n')||(i<100)) { if ((c>=48)&&(c<=57)||(c==' ')) { s[i]=c; i++; } else { printf("Inserito carattere errato!! esci"); return 0; } } s[i]='\0'; end=i; /* eliminazione spazi vuoti */ for(i=0;i<end;i++) { if(s[i]==' ') { for(j=i;j<end;j++) s[j]=s[j+1]; } } /*trasformazione intero*/ for(i=0;i<end;i++,end--) { aux=s[i]; s[i]=end; s[end]=aux; } for(i=0;i<end;i++) { p=potenza(i); in=in+((s[i]-48)*p); } printf("\n L'intero è: %d", in); return 0; } int potenza(int x) { int y,pot=1; if(x==0) return pot; for(y=1;y<=x;y++) pot=pot*10; } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sicuramente questo è sbagliato:
Codice:
for(i=0;i<end;i++,end--)
{ aux=s[i];
s[i]=end;
s[end]=aux;
}
Ad es. questo credo è quello che vuoi fare: Codice:
for(i=0;i<end/2;i++) {
aux=s[i];
s[i]=s[end-i-1];
s[end-i-1]=aux;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 28-05-2008 alle 12:36. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 24
|
il problema non me lo da lì!! Ma nel primo for alla IF..io ho messo il controllo c>=48 e <=57 (in ASCII da 0 a 9)!! Solamente che quando vado in esecuzione e metti dei numeri questo mi da errore come se avessi inserito de caratteri!!
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Il problema è qui:
Codice:
(c=getchar()!='\n') Hai idea di cosa possa esserci di sbagliato?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 24
|
while((c!='\n')||(i<100))
{ c=getchar(); if ((c>=48)&&(c<=57)) { s[i]=c; i++; } else if (c!='\n') { printf("Inserito carattere errato!! esci"); return 0; } } Ho corretto in questo modo! Solamente che se dopo l'inserimento dei caratteri di l'INVIO dovrebbe uscir dal ciclo (c!='\n')!!! Invece non lo fa! Devo inserire tutti a 100 i caratteri! |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
Quote:
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:28.




















