PDA

View Full Version : [C]-Domande da principiante


88MIKI88
18-06-2008, 19:20
Visto ke ho appena iniziato a programmare in C posterò i miei eventuali dubbi su qst topic.


E' giusto secondo voi qst programma??

#include <stdio.h>
main ()
{
int sb,cn,ct,c;
sb=0; /* contatore spazi bianchi */
cn=0; /* contatore spazi newline*/
ct=0; /* contatore caratteri tabulazioni */
while ((c=getchar()) !=EOF)
if(c == ' ')
++sb;
printf("%d\n", sb);
if(c== '\n')
++cn;
printf("%d\n", cn);
if(c== '\t')
++ct;
printf("%d\n", ct);

}


Il primo printf funzia alla perfezione gli altri 2 danno sempre valore 0 in qualunque caso....c'è qualcuno ke sa aiutarmi??

ndakota
18-06-2008, 20:29
mancano le graffe del while.. esegue solo il primo if :p

88MIKI88
18-06-2008, 20:37
Avevo provato a metterle xò mettendole quando scrivo qualcosa e do l'invio escono fuori una serie di numeri uno sotto l'altro.


Secondo voi x scrivere il seguente programma come dovrei agire??

Scrivere un programma i cui dati in uscita replichino i dati in ingresso sostituendo xò una stringa di 1 o più spazi bianchi con uno spazio singolo....

ndakota
18-06-2008, 20:45
no mettile ma dentro le graffe lascia solo gli incrementi dei counter.. le stampe mettile fuori ovviamente..

wingman87
19-06-2008, 00:32
Intanto usa il tag code, così mantieni l'indentazione anche qui sul forum. Fatto questo mettere le graffe è semplice, basta che ce ne sia una aperta prima di un rientro ed una chiusa alla fine dello stesso rientro (sempre se l'hai indentato correttamente). Le graffe sono superflue solo quando il blocco indentato è di una sola istruzione.

Seconda cosa, per poter replicare ciò che leggi da tastiera sei sulla giusta strada, c'è però un problema, nelle printf "%d" indica che vuoi stampare un intero, per questo ottieni dei numeri, se vuoi vedere i caratteri ascii corrispondenti devi usare "%c"

88MIKI88
20-06-2008, 22:51
C'è qualcuno in grado di darmi un input a qst problema:

Scrivere un programma i cui dati in uscita replichino i dati in ingresso sostituendo xò una stringa di 1 o più spazi bianchi con uno spazio singolo....

Praticamente se trovo 2 spazi bianchi vicini devo eliminarne 1 e stamparne solo 1.

variabilepippo
20-06-2008, 23:06
Visto ke ho appena iniziato a programmare in C posterò i miei eventuali dubbi su qst topic.

un input a qst problema


Di solito sui forum si pone una domanda per thread ed è buona norma evitare le abbreviazioni da SMS, qui non si pagano i caratteri in eccesso e l'unico effetto di contrarre le parole è peggiorare la leggibilità del post. :rolleyes:

wisher
20-06-2008, 23:15
C'è qualcuno in grado di darmi un input a qst problema:

Scrivere un programma i cui dati in uscita replichino i dati in ingresso sostituendo xò una stringa di 1 o più spazi bianchi con uno spazio singolo....

Praticamente se trovo 2 spazi bianchi vicini devo eliminarne 1 e stamparne solo 1.
Un aiutino, il problema è molto semplice:
Immagina di avere due stati:
A-nessuno spazio bianco letto
B-letto uno spazio bianco

se sei in A leggendo un carattere non spazio resti in A e stampi il carattere letto, leggendo uno spazio vai in B e stampi il primo spazio.
da B leggendo uno spazio resti in B senza stampare nulla, leggendo un carattere passi in A e stampi il carattere.

Puoi ricreare questa FSA in questo modo:

...
while(c = getCh()){
if(c==' '){
print c;
while(c == ' '){//Scarto i ' ' in eccesso
c = getCh();
}
}
print c;
}
...

~FullSyst3m~
20-06-2008, 23:34
Un aiutino, il problema è molto semplice:
Immagina di avere due stati:
A-nessuno spazio bianco letto
B-letto uno spazio bianco

se sei in A leggendo un carattere non spazio resti in A e stampi il carattere letto, leggendo uno spazio vai in B e stampi il primo spazio.
da B leggendo uno spazio resti in B senza stampare nulla, leggendo un carattere passi in A e stampi il carattere.

Puoi ricreare questa FSA in questo modo:

...
while(c = getCh()){
if(c==' '){
print c;
while(c == ' '){//Scarto i ' ' in eccesso
c = getCh();
}
}
print c;
}
...


Per me sto C è arabo.. ma come vi convincete??

88MIKI88
21-06-2008, 16:21
#include<stdio.h>

main ()
{
int c;
while (c=getchar()!=EOF)
{
if(c== ' ') {
printf ("%c", c);

while (c==' ')
c=getchar();
}
printf("%d",c);
}

}

Il codice è qst e come sintassi c'è visto ke il debugger nn dà errori xò il programma stampa solo 1....come mai????

wingman87
21-06-2008, 16:35
Usa il tag CODE, e nell'ultima printf stai ancora usando %d

88MIKI88
21-06-2008, 16:49
Sta di fatto ke nn esce ankora.......escono delle faccine.... :(

wingman87
21-06-2008, 17:16
C'è un errore nel while, dovrebbe essere:
while ((c=getchar())!=EOF)
Senza le parentesi mette in "c" il risultato del confronto "getchar()!=EOF"

88MIKI88
21-06-2008, 19:42
Ultimo esercizio di questo capitolo finalmente!

Scrivere un programma in cui i dati in ingresso siano uguali a quelli in uscita sostituendo però \b ad ogni backspace, \t ad ogni tabulazione e \\ ad ogni backslash....

Francamente quando ho letto il testo mi sono detto "questo esercizio è una cazzata!!"

Poi invece analizzandolo x bene non è così o almeno c'è solo un piccolo problema nelle stampe.... per stampare \b, \t, \\ come posso fare?? All'inizio ho pensato di andare a vedere se c'è un codice corrispondente in ASCII xò nn so nn mi sembra la strada giusta.....

wingman87
22-06-2008, 00:59
Non esiste un carattere specifico per stampare "\b", "\t" e "\\", semplicemente li devi stampare così come stringhe costanti. Occhio però che se scrivi:
printf("\t");
Non verrà stampato "\t" ma un carattere di tabulazione, per stampare "\t" devi aggiungere una '\' prima:
printf("\\t");
E così anche per le altre stringhe:
printf("\\b");
printf("\\\\");

88MIKI88
22-06-2008, 15:05
Sta di fatto che con i backslash non funziona.....se tu fai:

if ( c == '\') il compilatore impazzisce e ti inizia a trovare errori.

per farlo andare devo fare:

if (c=='\\') {
printf("\\\\")
}

in cui vengono stampati 3 backslash al posto di 2....c'è qualcuno che mi sa dire il perchè?

DanieleC88
22-06-2008, 17:03
Perché il backslash è un carattere di escape, se tu scrivi \' viene interpretata come una virgoletta e non come l'apice finale che racchiude un carattere, quindi per il compilatore c'è una sequenza mai terminata (ecco il perché degli errori).

Probabilmente c'è una stampa in più, se vedi 3 backslash (o la prima è quella ricevuta in input).

88MIKI88
22-06-2008, 17:43
Risolto il problema del backslash ne avevo messo uno in più :P

Sta di fatto che devo ancora risolvere quello del backspace

io ho scritto:

if (c == '\b') {
printf("\\b");

la sintassi è giusta soltanto che non funziona come dovrebbe.....

wingman87
23-06-2008, 01:26
La risposta molto probabilmente è qui: LINK (http://bytes.com/forum/thread220362.html)