|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2002
Città: Lecce
Messaggi: 889
|
Ce disperato programma
Questo codice dovrebbe contare gli spazi bianchi in una stringa, ma purtroppo non funziona.
![]() Dove ho sbagliato ![]() # include<stdio.h> #include<ctype.h> main() { char sentence[80]; int conta = 0; int indice = 0; printf("Enter a new line of text:\n"); gets(sentence); for(indice=0; sentence[indice] != '\0'; indice++); { If isspace(sentence[indice]) != 0 ++conta; } printf("Gli spazi sono in tutto: %d\n", conta); } Mi da errore alla linea " If isspace(sentence[indice]) != 0 " premetto che la funzione isspace ritorna un valore vero o falso!
__________________
I bambini e i saggi sono coloro che hanno il coraggio di dire le stupidaggini che gli adulti pensano solamente - Il nuovo forum di Anime e Manga Athlon XP 2500+ @ 2142 Mhz (209*10,5) , Abit Nf7-s rev 2.0, 512 Mb Corsair Xms PC 3200 Cas2, Ati Radeon 9500pro, HD Western Digital Caviar 80 Gb Buffer 8Mb, Lg L1710B |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Potrebbe essere che la funzione isspace non sia definita negli header che importi. Ma per quello che vuoi fare tu è sufficiente scrivere:
if sentence[indice]==32 { conta++ } 32 è il codice ascii che corrisponde allo spazio. Aloha!
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per evitare eventuali problemi di porting: sentence[indice]==' '
E' anche molto + intuitivo... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
If isspace(sentence[indice]) != 0
Come ti fa a compialre una riga del genere ? if(isspace(sentence[indice]) != 0) poi visto che isspace ritorna vero o falso if(isspace(sentence[indice])) Comunque isspace non fa il check solamente dello spazio... Quindi: if(sentence[indice] == ' ') |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2002
Città: Lecce
Messaggi: 889
|
La funzione esisteva in realtà, il problema era l'if che avevo scritto come If (con la maiuscola)
![]() Comunque ho eliminato naturalmente anche la parte con !=0. Ma ora il problema è un secondo programma che è il seguente. Lo scopo è eliminare gli spazi in eccesso in una stringa. Io confronto due caratteri e se sono tutti e due spazi non passo nulla da stampare, se uno non è spazio faccio stampare il carattere. Il problema è che mi da problemi su return 0 #include<stdio.h> #include<ctype.h> main() { char sentence[80]; int count = 0; int state = 0; printf("Enter a new line of text:\n"); gets(sentence); for(int index=0; sentence[index] != '\0';index++) if ((isspace(sentence[index]) & (isspace(sentence[index -1])) return 0; else printf("%c",sentence[index]); gets(sentence); }
__________________
I bambini e i saggi sono coloro che hanno il coraggio di dire le stupidaggini che gli adulti pensano solamente - Il nuovo forum di Anime e Manga Athlon XP 2500+ @ 2142 Mhz (209*10,5) , Abit Nf7-s rev 2.0, 512 Mb Corsair Xms PC 3200 Cas2, Ati Radeon 9500pro, HD Western Digital Caviar 80 Gb Buffer 8Mb, Lg L1710B |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ripeto isspace non controlla la presenza di spazi, ma anche di tab e di \n e \r...
Quindi devi controllare se il carattere è uguale a ' '... Come fai a fare un return 0; se il main non è dichiarato come int main ? Al massimo puoi fare return; e basta |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Sep 2002
Città: Lecce
Messaggi: 889
|
In effetti è stato un mio errore di espressione, a me interessano anche gli altri caratteri speciali come \n ecompagnia..
il problema è che ho provato a fare anche solo con return, ma non mi da niente lo stesso: comunque adesso provo a scrivere int main e a fare return 0
__________________
I bambini e i saggi sono coloro che hanno il coraggio di dire le stupidaggini che gli adulti pensano solamente - Il nuovo forum di Anime e Manga Athlon XP 2500+ @ 2142 Mhz (209*10,5) , Abit Nf7-s rev 2.0, 512 Mb Corsair Xms PC 3200 Cas2, Ati Radeon 9500pro, HD Western Digital Caviar 80 Gb Buffer 8Mb, Lg L1710B |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sinceramente non capisco perchè return... Me lo spieghi ?
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
L'and logico si fa così &&...& è l'operatore di and bit a bit...
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Sep 2002
Città: Lecce
Messaggi: 889
|
questo potrebbe rivelarsi interessante, ora provo.
Il problema è che sto lavorando in C solo da una settimana che per altro deve comprendere anche fisica è matematica. Essendo i miei primi programmi non ho molta dimestichezza. comunque il return era per uscire dalla if ![]()
__________________
I bambini e i saggi sono coloro che hanno il coraggio di dire le stupidaggini che gli adulti pensano solamente - Il nuovo forum di Anime e Manga Athlon XP 2500+ @ 2142 Mhz (209*10,5) , Abit Nf7-s rev 2.0, 512 Mb Corsair Xms PC 3200 Cas2, Ati Radeon 9500pro, HD Western Digital Caviar 80 Gb Buffer 8Mb, Lg L1710B |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Spiegami a parole cosa volevi fare di preciso con questa condizione: if(isspace(sentence[index]) && isspace(sentence[index-1])) Se fai index-1 quando index è 0 vai a leggere in una zona di memoria non appartenente a sentence...quindi potenzialmente pericolosa... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:05.