|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
[C]-Domande da principiante
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?? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
mancano le graffe del while.. esegue solo il primo if
![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
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.... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
no mettile ma dentro le graffe lascia solo gli incrementi dei counter.. le stampe mettile fuori ovviamente..
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
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" |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
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. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
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: Codice:
... while(c = getCh()){ if(c==' '){ print c; while(c == ' '){//Scarto i ' ' in eccesso c = getCh(); } } print c; } ...
__________________
|
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
#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???? |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Usa il tag CODE, e nell'ultima printf stai ancora usando %d
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
Sta di fatto ke nn esce ankora.......escono delle faccine....
![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
C'è un errore nel while, dovrebbe essere:
Codice:
while ((c=getchar())!=EOF) |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
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..... |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Non esiste un carattere specifico per stampare "\b", "\t" e "\\", semplicemente li devi stampare così come stringhe costanti. Occhio però che se scrivi:
Codice:
printf("\t"); Codice:
printf("\\t"); Codice:
printf("\\b"); printf("\\\\"); |
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
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è? |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
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).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
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..... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:12.