Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
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: 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
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: 2782
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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Prosegue lo sviluppo del telescopio spaz...
28 astronauti cinesi hanno condotto un'e...
Dal Padiglione Italia al mercato globale...
POCO M8: display AMOLED luminoso, batter...
ECOVACS, tante novità a Las Vegas...
Caso Galaxy Ring difettoso: Samsung chiu...
Targa e assicurazione per monopattini el...
AI Cloud Protect: la soluzione di Check ...
Nuovo spettacolare video del razzo spazi...
Hisense presenta a CES 2026 il display M...
XPeng P7+ è pronta per l'Europa: ...
IKEA nuove lampade Matter annunciate al ...
Il telescopio Hubble potrebbe andare dis...
Hisense introduce RGB MiniLED evo (a qua...
Deumidificatore De'Longhi in offerta su ...
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: 04:14.


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