Newsgroup: it.comp.lang.c
Titolo: Controllo caratteri

Ciao a tutti.
Sto' cominciando ad imparare il c lo dico subito perche' posso aver commesso
qualche cazz...
Vi prego di non tener conto di quello che fa il programma in quanto e' un
esercizio, comunque sono accettate critiche su come e' strutturato il
programma.
l'esercizio fa questo:
legge un carattere da un puntatore a file e controlla se questo  carattere
e' diverso da un carattere di space o fine linea se e' vero lo memorizza in
un array di char.
Lo so' c'e' uno sbaglio in quanto io memorizzo il carattere in un int e poi
lo vado a mettere in un array di char; questo lo devo ancora risolvere.
Il mio problema pero' e quello che il programma non mi arriva a controllare
se il carattere letto e' uno spazio cioe' se incontra uno space non mi
esegue niente tante' che ho provato a mettere una printf che pero' non mi
viene eseguita.
else if(ch==32 || ch=='\t'|| ch=='\b')     Se il char letto e' uno spazio
      {
        printf("E' uno spazio\n");
        buffer[count++]='\0';
        ............
        ..........
Sotto riporto il codice
Ringrazio e saluto fin d'ora tutto il NG
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
struct pippo {
   int a;
   int b;
   int c;
}gzimo[5];
FILE *pf;
char buffer[255],ch;
const char *namefile="d:/pippo.lon";
int count,c,r;
struct pippo *pippo_p;
int main(void)
{
   pippo_p=gzimo;
   if((pf=fopen(namefile,"r"))==NULL)
     printf("Impossibile trovare file\n");
   while((ch=getc(pf))!=EOF)
{
//Legge il carattere dallo stream file restituisce il char letto finche' non
incontra il char di fine file(EOF) oppure vi e' un errore.//
if(ch!='\b'&& ch!='\n')
{
 buffer[count]=ch;
    count++;
 }
Se il char letto e' diverso dal char di space e nuova linea
nuova linea e dal char spazio lo memorizza nel buffer
poi incrementa il suo indice.
else if(ch==32 || ch=='\t'|| ch=='\b')
{
        printf("E' uno spazio\n");
        buffer[count++]='\0';
 Se il char letto e' uno spazio
 aggiunge il null finale al buffer.
        c++;                 Incrementa contatore di campi.
        switch(c)
        {
           case 1:
             pippo_p->a=atoi(buffer);
             break;
           case 2:
             pippo_p->b=atoi(buffer);
             break;
           case 3:
             pippo_p->c=atoi(buffer);
             break;
           default:
             break;
        }
        count=0;
      }
   }
   printf("%d %d %d",pippo_p->a,pippo_p->b,pippo_p->c);
   printf("\n\tPremere un tasto per uscire\n");
   getch();
   return 0;
}

         ..........
.. e usare isspace()? Ci sono anche altri caratteri che sono considerati
"spazio" e che tu skippi via allegramente, e ho il vago sospetto che '\b'
non sia considerato uno "spazio".
HTH
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 {
Qui ci sono i due problemi piu' gravi (non ho letto oltre).
prima di tutto count non e' stato mai inizializzato e questo
e' male.
Secondo, e qui rispondo al tuo quesito iniziale,
il senso della prima if e'
"se il carattere non e' un '\b' e non e' un '\n' fai
la seguente cosa"
ALTRIMENTI, se il carattere e' un 32 etc.etc.
quind se il tuo carattere e' per esempio uguale a
32, allora il primo if e' verificato, infatti
essendo 32 non e' uguale a \b o \n e quindi
il ramo ELSE giustamente non viene eseguito.
ciao,
g.