|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
[C]problema in compilazione
sono alle prime armi e da manuale devo provare a fare un programma di nome detab che tolga i caratteri \t e li sostituisca con uno spazio bianco per ogni tab.
ho provato in questo modo ma mi da parecchi errori che non riesco a risolvere. Codice:
#include <stdio.h>
#define limite =30
char detab (char stringa[], int limite);
main ()
{ int i, c;
char stringa[limite];
stringa = detab(stringa,limite);
printf("%s", stringa);
return 0;
}
char detab (char stringa[], int limite)
{ int i, c;
for (i=0; i != '\t' && (c=getchar())!= EOF;++i)
{stringa[i]=c;}
if ((c=getchar()=='\t')
{
for (i;i=='\t';++i)
stringa[i]=' ';
}
return stringa;
}
cambiatabulazioni.h:11: error: syntax error before ‘=’ token cambiatabulazioni.h: In function ‘main’: cambiatabulazioni.h:14: error: syntax error before ‘=’ token cambiatabulazioni.h:15: error: ‘stringa’ undeclared (first use in this function) cambiatabulazioni.h:15: error: (Each undeclared identifier is reported only once cambiatabulazioni.h:15: error: for each function it appears in.) cambiatabulazioni.h:15: error: syntax error before ‘=’ token cambiatabulazioni.h: At top level: cambiatabulazioni.h:23: error: syntax error before ‘=’ token cambiatabulazioni.h: In function ‘detab’: cambiatabulazioni.h:26: error: ‘stringa’ undeclared (first use in this function) cambiatabulazioni.h:29: error: syntax error before ‘{’ token cambiatabulazioni.h:30: error: syntax error before ‘)’ token |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 82
|
non ci va l'uguale nella define, e non mettere tutto nel .h...
__________________
Software house Manfriday |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
nel senso di fari vari file e poi includerli?
ok ma questo non è il problema vero? |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 82
|
metti almeno il main in un .c
così non se può proprio vedere...non so manco se si può...
__________________
Software house Manfriday |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
tieni presente che sto seguendo il libro e il libro imposta il linguaggio in questa maniera, sono al primo capitolo, quindi non può essere quello il problema.
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Ci sono parecchi errori.
Allora, come ha detto fix non ci vuole l'uguale nel #define. Non c'è bisogno di mettere il metodo in un header, in fondo è solo un metodo oltre il main, quindi puoi tenere tutto in un unico file programma.c Inoltre non è char detab(...), perché così restituisce un carattere, quindi è char* detab(...), così che restituisca un puntatore char, praticamente un array di caratteri, cioè una stringa. E poi, scusa, non è meglio dichiarare void la funzione detab, ricevere un puntatore stringa (e non un array), e così non dover ritornare nulla? Ultima modifica di agente mm8 : 03-03-2009 alle 19:02. |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
ok infatti ero parecchio indeciso su quel char detab però io i puntatori ancora non li ho fatti,infatti sono al primo capitolo.
se dichiarassi void e non mi restituisse niente come farei a stampare la nuova struinga senza '\t'? grazie per le risposte comunque. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
dichiarandolo void, modificheresti la stringa, senza bisogno di ritornare nulla.
Il codice verrebbe dunque: Codice:
int main ()
{ int i, c;
char stringa[limite];
detab(stringa,limite);
printf("%s", stringa);
return 0;
}
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 86
|
Si daccordo, intanto fai compilare il codice senza le cose complesse.
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
ok perfetto ho apportato le modifiche che mi hai consigliato ed in effetti va molto meglio cosi
comunque int non è necessario al main forse lo è solo nel c++. per il resto ho risolto altri piccoli errori ma me ne mancano due uguali Codice:
syntax error before numeric constant Codice:
void detab (char stringa[], int limite) |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Puoi postare il tuo codice attuale?
Comunque, per la funzione void, sicuro di aver tolto il return? |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
sisi il return è tolto
comunque ecco il codice Codice:
#include <stdio.h>
#define limite 30
void detab (char stringa[], limite);
main ()
{ int i, c;
char stringa[limite];
detab(stringa,limite);
printf("%s", stringa);
return 0;
}
void detab (char stringa[], limite)
{ char stringa[limite];
int i, c;
for (i=0; i != '\t' && (c=getchar())!= EOF;++i)
{stringa[i]=c;}
if ((c=getchar())=='\t')
for (i;i=='\t';++i)
stringa[i]=' ';
}
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
devi fare:
Codice:
void detab(string[limite]){...}
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
no scusami non ho capito
dove devo mettere il codice che dici tu? se lo metto quando vado ad implementare il detab mi da errore di sintassi prima di [ ti dispiace ricopiarmi il programma con le modifiche? Ultima modifica di DaRk\S0ul : 05-03-2009 alle 16:37. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Hai ragione, ho sbagliato io.
Praticamente al posto di Codice:
void detab(char stringa[], int limite) Codice:
void detab(char stringa[limite]) |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
@DaRk\S0ul
Prova a descrivere a parole l'algoritmo che vorresti implementare, tradurlo in codice poi non sarà difficile. Finora quali argomenti hai visto? Per sapere cosa puoi e cosa non puoi fare |
|
|
|
|
|
#17 | ||
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
Quote:
Codice:
#include <stdio.h>
#define limite 30
void detab(char stringa[limite]);
main ()
{ int i, c;
char stringa[limite];
detab(stringa,limite);
printf("%s", stringa);
return 0;
}
void detab (char stringa[],int limite)
{ char stringa[limite];
int i, c;
for (i=0; i != '\t' && (c=getchar())!= EOF;++i)
{stringa[i]=c;}
if ((c=getchar())=='\t')
for (i;i=='\t';++i)
stringa[i]=' ';
}
Quote:
e i relativi codici mi sono usciti facilmente, il mio problema per ora è evidentemente il main () |
||
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Quote:
Codice:
if/for/while/...(...)
{
...codice...
}
Codice:
if/for/while/...(...){
...codice...
}
Codice:
if/for/while/...(...)
{...codice...}
|
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
ok allora grazie dei consigli domani mi rivedo la funzione.
vorrei solo chiarire prima i problemi del main e capirli per bene poi mi dovrò solo sbattere un pò sull'algoritmo. buona notte. |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Intanto non comprendo perché dichiari nel main la seguente stringa se poi non utilizzi queste variabili.
Codice:
int i, c; I parametri delle funzioni non si confondono con la dichiarazione di variabili, possono anche avere nomi uguali, così come tu hai fatto, ma per una maggiore capibilità conviene utilizzare dei nomi magari simili ma comunque diversi. Tieni conto che il tuo codice dovranno poi rileggerlo altri sviliuppatori ed in questo stato nessuno capisce nulla Tornando all'ultimo codice scritto: il main si che è totalmente sbagliato, soprattutto nella chiamata di funzione. NOn noti che non c'è corrispondenza tra i parametri impostati nella fuznione e ciò che tu gli stai passando nel main?! Poi volevo dirti. Ma questo non è sicuramente esercizio da inizio linguaggio. Il primo capitolo sarà una specie di scheda riassuntiva del C. Le funzioni le farai quasi alla fine. Che libro è?
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:14.




















