PDA

View Full Version : Ce disperato programma


Beppe2hd
04-10-2003, 16:37
Questo codice dovrebbe contare gli spazi bianchi in una stringa, ma purtroppo non funziona. :cry:
Dove ho sbagliato :mad:


# 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!

bsummer
04-10-2003, 17:13
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!

cionci
05-10-2003, 08:54
Per evitare eventuali problemi di porting: sentence[indice]==' '
E' anche molto + intuitivo...

cionci
05-10-2003, 08:57
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] == ' ')

Beppe2hd
05-10-2003, 10:52
La funzione esisteva in realtà, il problema era l'if che avevo scritto come If (con la maiuscola):muro: .

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);
}

cionci
05-10-2003, 11:00
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

Beppe2hd
05-10-2003, 14:31
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

cionci
05-10-2003, 15:50
Sinceramente non capisco perchè return... Me lo spieghi ?

cionci
05-10-2003, 15:51
L'and logico si fa così &&...& è l'operatore di and bit a bit...

Beppe2hd
05-10-2003, 18:19
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:p e mi sa che come metodo era poco ortodosso... vero?

cionci
06-10-2003, 04:20
Originariamente inviato da Beppe2hd
comunque il return era per uscire dalla if:p e mi sa che come metodo era poco ortodosso... vero?
Il return esce dalla funzione corrente...

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...