Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-03-2009, 17:49   #1
DaRk\S0ul
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;
			
			
			}
come errori mi riporta sempre gli stessi anche nell'esercizio che in un post di poco piu giù ho scritto e sono:
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
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 17:59   #2
FixFixFix
Member
 
Iscritto dal: Dec 2008
Messaggi: 82
non ci va l'uguale nella define, e non mettere tutto nel .h...
__________________
Software house Manfriday
FixFixFix è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 18:03   #3
DaRk\S0ul
Member
 
Iscritto dal: Nov 2003
Messaggi: 142
nel senso di fari vari file e poi includerli?
ok ma questo non è il problema vero?
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 18:20   #4
FixFixFix
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
FixFixFix è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 18:47   #5
DaRk\S0ul
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.
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 18:56   #6
agente mm8
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.
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 21:18   #7
DaRk\S0ul
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.
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2009, 15:14   #8
agente mm8
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;
	}
P.S.: Il metodo main deve ritornare un int, infatti hai inserito return 0.
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2009, 15:30   #9
federico100mt
Member
 
Iscritto dal: Apr 2008
Messaggi: 86
Si daccordo, intanto fai compilare il codice senza le cose complesse.
federico100mt è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2009, 18:16   #10
DaRk\S0ul
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
uno sulla dichiarazione della funzione void e l'altro quando la implemento cioè

Codice:
void detab (char stringa[], int limite)
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2009, 19:56   #11
agente mm8
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?
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2009, 20:23   #12
DaRk\S0ul
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]=' ';
			
				
		
			
			
}
ad entrambi i void riporta quell'errore.
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 13:37   #13
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
devi fare:
Codice:
void detab(string[limite]){...}
l'errore te lo da perché cerchi di avere due variabili con lo stesso nome: stringa[] che viene data in pasto a detab come argomento, e stringa[] che definisci nello stesso detab.
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 16:32   #14
DaRk\S0ul
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.
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 18:59   #15
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
Hai ragione, ho sbagliato io.
Praticamente al posto di
Codice:
void detab(char stringa[], int limite)
devi inserire
Codice:
void detab(char stringa[limite])
ecco tutto.
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 19:38   #16
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2786
@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
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 21:45   #17
DaRk\S0ul
Member
 
Iscritto dal: Nov 2003
Messaggi: 142
Quote:
Originariamente inviato da agente mm8 Guarda i messaggi
Hai ragione, ho sbagliato io.
Praticamente al posto di
Codice:
void detab(char stringa[], int limite)
devi inserire
Codice:
void detab(char stringa[limite])
ecco tutto.
sembrerò scemo ma continua a non andare ora ti riposto il codice ho provato a mettere quel codice che mi hai dato tu ad entrambi i void ma mi da sempre problemi
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:
@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
grazie per il consiglio ma ti posso dire che io gia faccio cosi infatti ho continuato facendo altri esercizi (con uno dei quali ho lo stesso problema)
e i relativi codici mi sono usciti facilmente, il mio problema per ora è evidentemente il main ()
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 22:19   #18
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2786
Quote:
Originariamente inviato da DaRk\S0ul Guarda i messaggi
grazie per il consiglio ma ti posso dire che io gia faccio cosi infatti ho continuato facendo altri esercizi (con uno dei quali ho lo stesso problema)
e i relativi codici mi sono usciti facilmente, il mio problema per ora è evidentemente il main ()
Ti ho dato quel consiglio perché al di là dell'errore di compilazione ce n'è sicuramente uno (anzi di più) di natura algoritmica. Per vedere meglio gli errori ti consiglio di indentare in questo modo:
Codice:
if/for/while/...(...)
{
    ...codice...
}
oppure

Codice:
if/for/while/...(...){
    ...codice...
}
e non

Codice:
if/for/while/...(...)
    {...codice...}
e poi rileggere meglio il codice confrontandolo con la descrizione discorsiva dell'algoritmo
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2009, 23:47   #19
DaRk\S0ul
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.
DaRk\S0ul è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2009, 10:21   #20
-hide-
Senior Member
 
L'Avatar di -hide-
 
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;
Poi il prototipo della funzione, cioè quello che hai messo in alto, deve essere uguale a quello della dichiarazione, cioè quello che hai messo alla fine.
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
LinkedIn
-hide- è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Heatspreader originale al posto del wate...
Ubisoft ha definitivamente archiviato Wa...
Motivair by Schneider Electric presenta ...
Un dissipatore che non richiede energia ...
Con Maia 200 Microsoft alza l'asticella ...
La Cina impone requisiti anche per lo st...
Apple lancia AirTag aggiornato: range es...
Microsoft risolve i blocchi di Outlook: ...
OpenAI verso il disastro finanziario? L’...
X nei guai: l'UE indaga sui pericoli del...
Caso Corona-Signorini: il giudice blocca...
470 petaFLOPS con una frequenza di 56 GH...
WhatsApp: abbonamento per rimuovere la p...
Xiaomi Redmi Note 15 in promozione: smar...
NVIDIA investe 2 miliardi in CoreWeave: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v