Newsgroup: it.comp.lang.c
Titolo: Ennesimo chiarimento

void min_max(void)
{
        int i=0;
        printf("Scrivi una parola:\t");
//      for(;(str[i]=getchar())!='\n' && i<MAX;i++)
        scanf("%50s", str);
        printf("\n");
        for(i=0;str[i]!='\0';i++)
                if(!(str[i]>64 && str[i]<91))
                str[i]=str[i]-32;
        printf("%s\n", str);
}
Perchè se commento scanf e decommento for nell'esecuzione ho segmentation
fault?
Cosa c'è che non va?
Quest'altra viene eseguita ma non mi viene dato nemmeno il tempo di digitare
la stringa:
void num_car(void)
{
        int s=0, x=0, y=0, z=0;
        printf("Immetti una stringa con o senza numeri:\t");
        for(;(str[s]=getchar())!='\n' && s < MAX;s++)
                ;
        for(s=0;str[s]!='\0';s++)
                if((str[s]>47 && str[s]<58) && (str[s]>96 && str[s]<123) && (str[s]>64 &&
str[s]<91))
                x = x+1;
        for(s=0;str[s]!='\0';s++)
                if(str[s]>47 && str[s]<58)
                y=y+1;
        for(s=0;str[s]!='\0';s++)
                if((str[s]>64 && str[s]<91) && (str[s]>96 && str[s]<123))
                z=z+1;
        printf("\nIl numero complessivo dei caratteri e delle cifre è %d", x);
        printf("\nIl numero di cifre è %d\nIl numero di caratteri è %d\n", y, z);
}
Fa tutto da sola!
Peeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrkkkkkkkkkkkkkeeeeeeee????????  :(((

 fault?
Cos'e' "str"? Nessuno ha la palla di vetro qua.
-- 
Mat/tia Belletti - Graduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 
http://snipurl.com/beeu
attrezziamoci :p
-- 
sbi

 Cos'e' "str"? Nessuno ha la palla di vetro qua.
str č un array di caratteri!
Non assegnavo il carattere '\0' dopo il for.
Il problema l'ho risolto ma non mi č chiara una cosa:
perchč certe volte quando devo inserire piů volte dei valori con scanf o con
getchar non mi viene dato il tempo di inserirli?
per esempio:
void n_let_cfr(void)
{
        int i=0, f=0;
        char car, invio;
        printf("Immetti una stringa:\t");
        scanf("%50s", str);
        scanf("%c", &invio);                              //se commento scanf
        printf("Digita una lettera e premi invio:\t");
        scanf("%c", &car);
        for(i=0;str[i]!='\0';i++)
                if(str[i]==car)
                f=f+1;
        printf("Il carattere %c compare %d volta/e\n", car, f); 
}
Scusate se rompo.Ma non mi piacciono le cose che non capisco!
Grazie         :)

 fault?
Per esempio perché scanf si preoccupa di mettere il terminatore di
stringa ('\0') in fondo alla stringa mentre nell'"acquisizione manuale"
(chiamiamola così quella nel for) questo devi farlo tu, e non lo fai.
Quindi la condizione del for successivo "for(i=0;str[i]!='\0';i++)" non
viene mai riscontrata (o almeno non quando vuoi tu) e quando accederai a
str[i] (dentro il secondo ciclo for) con i sufficientemente grande ottieni
un seg fault.
Ciao
Mtc

         for(;(str[s]=getchar())!='\n' && s < MAX;s++)
<Questo metodo di aquisire input da tastiera non è il migliore.>
Non ti da il tempo molto probabilmente perché hai il buffer di input non
svuotato. Supponi che prima di chiamare num_car() hai preso input con una
fgets() in che non salva il "\n" nella stringa perché ne ha raggiunto la
massima dimensione, allora tutto quello che non è "entrato" nella stringa
passata a fgets rimane in un buffer di input che viene utilizzato dalle
successive funzioni che accedono a stdin. Quindi, se non lo svuoti, è
possibile che vi sia rimasto dentro un "\n" che non ti da neanche il tempo
di digitare la stringa.
</Questo metodo di aquisire input da tastiera non è il migliore.>
Ciao
Mtc