Thread obsoleto Varie domande

Syncro

Utente Esperto
Autore del topic
8 Settembre 2010
1.249
22
Miglior risposta
0
Ho fatto questo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

1) Perché in alcune funzioni mettono "int" prima della funzione? Non parlo delle variabili, proprio delle funzioni (da qualche parte l'ho visto anche nelle funzioni), nelle variabili capisco sia normale ma nelle funzioni da quel che so no..

2) Perché quando avvio il programma, se digito albachiara oltre ad uscire ciò che ho scritto io, esce anche la stringa ("Digita albachiara") capisco che torna all'inizio perché c'è il while, ma perché le mette sulla stessa linea?

Ad esempio se scrivo Abcde esce:
AbcdeDigita 'albachiara':

3) Cosa posso fare con il C? Su SA-MP imparavo il Pawn perché mi divertivo a scoprire le funzioni (era basato sul C), ma sul C oltre a stupidi programmi di calcolo, cosa posso fare?

4) Considerando che già conosco il Pawn, qual'è il miglior linguaggio da imparare? Dite che il C è molto difficile per un "novellino"?
@Ignazio96 @System10
 
Ultima modifica:
Ho fatto questo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

1) Perché in alcune funzioni mettono "int" prima della funzione? Non parlo delle variabili, proprio delle funzioni (da qualche parte l'ho visto anche nelle funzioni), nelle variabili capisco sia normale ma nelle funzioni da quel che so no..

2) Perché quando avvio il programma, se digito albachiara oltre ad uscire ciò che ho scritto io, esce anche la stringa ("Digita albachiara") capisco che torna all'inizio perché c'è il while, ma perché le mette sulla stessa linea?

Ad esempio se scrivo Abcde esce:
AbcdeDigita 'albachiara':

3) Cosa posso fare con il C? Su SA-MP imparavo il Pawn perché mi divertivo a scoprire le funzioni (era basato sul C), ma sul C oltre a stupidi programmi di calcolo, cosa posso fare?

4) Considerando che già conosco il Pawn, qual'è il miglior linguaggio da imparare? Dite che il C è molto difficile per un "novellino"?
@Ignazio96 @System10

allora dal main già inizi a sbagliare secondo lo standard del C la funzione main è int main(int argc,char * argv) o al massimo int main comunque il main è la funzione principale , diciamo il punto d'ingresso del programma ecco perché ci sta sempre
char stringa[128] = è un array di caratteri e puoi inserire max 127 caratteri l'ultimo è carattere '\0' indica la fine stringa
int giusto. non è un booleano i booleani si dichiarano con Bool e sono "inseriti" nella libreria stdlib.h

Ti rispondo alla prima domanda : davanti alla funzione ci può essere il tipo che indica che valore restituisce alla funzione chiamante. se non restituisce nulla c'è void. Le funzioni possono ricevere anche degli argomenti e possono essere passati per Valore o Riferimento
2 domanda: lo mette sulla stessa linea perché non hai chiamato il carattere per andare "accapo" il code diventa così :
ah n.b il terzo argomento per strcmp non è necessario
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
else if equivale a altrimenti se
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

quì c'è anche il ! che è un operatore diciamo il controllo sarebbe questo ... se il confronto tra stringa e albachiara è vero visto che c'è il not diventa è falso
per esempio :
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

rispondo alla 3 domanda : In c se non conosci molte cose del linguaggio realizzi poco e niente infondo un pò come tt i linguaggi , dovresti partire dalle base , queste non sono per niente le basi ... dovresti studiarti tt i tipi di variabili (inanzi tt) capire bene if e switch - studiare i cicli - i vettori e matrici , le funzioni e le strutture.

4) dipende dal modo in cui approcci con il C per capirlo bene soprattutto argomenti abbastanza complessi come liste o thread ci vogliono anche 2-3h o argomenti più semplici come strutture o solo puntatori che per essere capite e utilizzate nel modo corretto impiegano del tempo.inoltre se frequenti un tecnico C/C++ sono argomenti di studio. Il C è un linguaggio complesso però se hai tempo e voglia puoi tranquillamente studiarlo. :emoji_smiley:
 
Ultima modifica:
Strano che il compilatore non ti rompa le scatole con quel 'main()' messo così. :emoji_relieved:

Anyway, il carattere di fine stringa è \0 e non /0, oppure il numero 0 scritto senza apici (quindi codice ASCII 0).
Per il tipo bool non puoi usarlo in C, a meno ché tu non stia compilando secondo lo standard C99, quindi va bene come hai fatto tu.
Il terzo parametro di strcmp() non è richiesto se usi appunto strcmp() e non strncmp(). Ti suggerisco di usare strcmp() senza terzo parametro, che confronta direttamente tutta la stringa.
Per andare a capo puoi scrivere \n, ma dipende su che OS stai lavorando. Ad esempio, su windows serve \r\n, mentre su linux basta il \n.

Leggo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Con questo si fa un assegnamento dentro l'if, non stai controllando se x è diverso da 5.

Puoi comunque scrivere quel ciclo senza bisogno di 'giusto', visto che poi metti un return 1; dentro al ciclo.
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
@Dvdxseo

mi so dimenticato un uguale(ora aggiunto) :emoji_alien: è ho sbagliato senso del carattere ... mi sorprendeva che non avevi risposto :emoji_smiley:.

riguardo a questo :
Per andare a capo puoi scrivere \n, ma dipende su che OS stai lavorando. Ad esempio, su windows serve \r\n, mentre su linux basta il \n.

uso \n con codeblock sotto windows è funziona perfettamente :emoji_smiley:
 
Ultima modifica:
@TBH: Grazie della risposta, comunque si.. Su Windows si usa \n perché lo si usa anche su SA-MP ad esempio per le 3DTextLabel.
Si, else potevo metterlo anche senza "if" ma in genere tendo a precisare quindi ho messo anche l'if, alla fine poco cambia. Per quanto riguarda "main()" onestamente non ci capisco tanto, i Callbacks su SA-MP sono del tutto diversi.

Qui su C# si usa void quando non c'è il return e quindi la funzione non ritorna nessun valore e si usa int quando la funzione ritorna un numero integer (qui mi chiedo, ma si usa char quando ritorna una stringa? :emoji_relieved:). Su SA-MP invece si usava public per le funzione pubbliche, gli stock per quelle che vanno richiamate e per quelle pubbliche che non erano ancora inserite in una libreria (tipo a_samp.inc) si usava il forward per richiamare la funzione.

Comunque mi sta interessando parecchio il C, ma se tipo una persona vuole fare un programma va sempre tutto quando in "main()"? Su SA-MP ci sono più callbacks e in main() non ci metti nulla perché c'è "OnGameModeInit", "OnPlayerConnect" ecc. che sono callbacks richiamati appunto quando un player si connette, qua invece? Non è possibile creare dei Callbacks? Tipo "OnTypingMessage" che viene richiamato quando mandi un messaggio?

Inoltre, puoi aiutarmi un po' sui return? Perché una funzione non dovrebbe ritornare nulla? E soprattutto perché int/void si mettono non solo nei callbacks ma anche nelle funzioni, ovvero.. Non lo vedo mettere solo su main() ma anche su alcune funzioni (per funzioni intendo tipo string compare, print, ecc)
 
Grazie della risposta, comunque si.. Su Windows si usa \n perché lo si usa anche su SA-MP ad esempio per le 3DTextLabel.
Si, else potevo metterlo anche senza "if" ma in genere tendo a precisare quindi ho messo anche l'if, alla fine poco cambia. Per quanto riguarda "main()" onestamente non ci capisco tanto, i Callbacks su SA-MP sono del tutto diversi.
Diciamo che mettendo \r\n non si sbaglia mai. Per quanto riguarda l'else if, quello che dici te non ha senso, fai un controllo in più inutile che può essere pesante (di certo non in questo programma, è ovvio, ma non conviene mettere else if per la condizione opposta all'if.

Qui su C# si usa void quando non c'è il return e quindi la funzione non ritorna nessun valore e si usa int quando la funzione ritorna un numero integer (qui mi chiedo, ma si usa char quando ritorna una stringa? :emoji_relieved:). Su SA-MP invece si usava public per le funzione pubbliche, gli stock per quelle che vanno richiamate e per quelle pubbliche che non erano ancora inserite in una libreria (tipo a_samp.inc) si usava il forward per richiamare la funzione.

Comunque mi sta interessando parecchio il C, ma se tipo una persona vuole fare un programma va sempre tutto quando in "main()"? Su SA-MP ci sono più callbacks e in main() non ci metti nulla perché c'è "OnGameModeInit", "OnPlayerConnect" ecc. che sono callbacks richiamati appunto quando un player si connette, qua invece? Non è possibile creare dei Callbacks? Tipo "OnTypingMessage" che viene richiamato quando mandi un messaggio?
Per ritornare una stringa devi dichiarare la funzione come char *. Le funzioni public non ci sono in C perché non è ad oggetti e quindi non serve. Puoi fare tutte le funzioni che vuoi in C e richiamarle col loro nome senza forward. Esempio
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Inoltre, puoi aiutarmi un po' sui return? Perché una funzione non dovrebbe ritornare nulla? E soprattutto perché int/void si mettono non solo nei callbacks ma anche nelle funzioni, ovvero.. Non lo vedo mettere solo su main() ma anche su alcune funzioni (per funzioni intendo tipo string compare, print, ecc)
Se non ritorna nulla o qualcosa lo decidi tu, dipende da cosa devi fare. Il main è una funzione, ed ogni funzione deve essere dichiarata secondo questa regola:
tipo_restituito nome(argomenti)
Mentre per invocarla si usa
nome(argomenti);
 
Diciamo che mettendo \r\n non si sbaglia mai. Per quanto riguarda l'else if, quello che dici te non ha senso, fai un controllo in più inutile che può essere pesante (di certo non in questo programma, è ovvio, ma non conviene mettere else if per la condizione opposta all'if.

Per ritornare una stringa devi dichiarare la funzione come char *. Le funzioni public non ci sono in C perché non è ad oggetti e quindi non serve. Puoi fare tutte le funzioni che vuoi in C e richiamarle col loro nome senza forward. Esempio
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Se non ritorna nulla o qualcosa lo decidi tu, dipende da cosa devi fare. Il main è una funzione, ed ogni funzione deve essere dichiarata secondo questa regola:
tipo_restituito nome(argomenti)
Mentre per invocarla si usa
nome(argomenti);

Okey, ho capito tutto e vi ringrazio, voi quanto ci avete messo per imparare e a che livelli state?
Ma la funzione printf su SA-MP sta per "printformat" ovvero printf(const format[], argomenti), quindi viene usata per fare tipo printf("Risultato: %i", risultato); mentre per le stringhe normali usano sempre print (senza la F che sta per format), e print sarebbe senza argomenti ovvero: "print('wee come stai?');", su C# si usa sempre printf? Non esiste print?
E inoltre volevo chiedervi di una domanda a cui non mi avete risposto affatto, su SA-MP ci stanno varie librerie tipo "a_samp.inc", "a_players.inc" ecc, tu ovviamente puoi aggiungerne nuove scaricandole o tenerti quelle di SA-MP, solo che per ogni libreria si conoscono le funzioni (c'è una barra laterale con l'elenco funzioni), su C# non c'è questa possibilità? E voi come fate a scoprire le funzioni che potete utilizzare? Ve le imparate a memoria?
 
Okey, ho capito tutto e vi ringrazio, voi quanto ci avete messo per imparare e a che livelli state?
Ma la funzione printf su SA-MP sta per "printformat" ovvero printf(const format[], argomenti), quindi viene usata per fare tipo printf("Risultato: %i", risultato); mentre per le stringhe normali usano sempre print (senza la F che sta per format), e print sarebbe senza argomenti ovvero: "print('wee come stai?');", su C# si usa sempre printf? Non esiste print?
E inoltre volevo chiedervi di una domanda a cui non mi avete risposto affatto, su SA-MP ci stanno varie librerie tipo "a_samp.inc", "a_players.inc" ecc, tu ovviamente puoi aggiungerne nuove scaricandole o tenerti quelle di SA-MP, solo che per ogni libreria si conoscono le funzioni (c'è una barra laterale con l'elenco funzioni), su C# non c'è questa possibilità? E voi come fate a scoprire le funzioni che potete utilizzare? Ve le imparate a memoria?
Io ho imparato prima il php e poi il C. :emoji_relieved: Ma per il C non sono a un livello molto alto, so fare programmazione di sistema e di rete però.

In C non esiste print, semplicemente usi printf con un solo argomento che è la frase che vuoi stampare.
Per le librerie ce ne sono una marea in c, ma non vanno scaricate, ci sono già tutte. Le funzioni che possiamo utilizzare le scopriamo guardando nelle librerie, leggendo dei manuali (come il man del terminale di Unix) e poi (almeno io) me le ricordo a forza di usarle. :emoji_relieved:
 
@Syncro riguardo al fatto dell'elenco delle funzioni su C# questo non esiste però t'aiuta molto l'intelliSense che comunque autocompleta quello che stai scrivendo o magari ti elenca tt i metodi di una classe.
le funzioni che conosco buona parte le ho studiate e si imparano visto che si usano sempre . altre invece usate occasionalmente si cerca online il Prototipo di funzione per capire che argomenti ricevono e cosa restituiscono.
In C# si usa Console.Writeline("prova \n"); e console.readLine() . (una cosa molto simile al Vb.net)
un consiglio fino a quando non utilizzi bene il C e C++ non programmare in C++.Net e C#
te lo dico semplicemente perchè il C++.Net non tanto a livello di console CLR , ma a livello di form è diverso dallo Standard per esempio l'istanza di una classe è new in c++ in C++.net diventa gcnew() ... quindi per non incasinarti lascia perdere sia C++.net & C#.
 
@TBH vi ringrazio ma per C# intendevo C, pensavo fossero la stessa cosa.. Mi spavento a pensare che c'è C++, C++.Net, C#, C, quanti sono? LòL, il D non esiste?
 
1) Perché in alcune funzioni mettono "int" prima della funzione? Non parlo delle variabili, proprio delle funzioni (da qualche parte l'ho visto anche nelle funzioni), nelle variabili capisco sia normale ma nelle funzioni da quel che so no..

Volevo risponderti con più precisione a questa domanda. Devi sapere che nel momento in cui crei una funzione standard come

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

ci sono alcune cose che devi valutare.

La linea/funzione di esempio che ti ho dato è detta dichiarazione del prototipo della funzione. Su questa funzione trovi due volte void:

Quello rosso sta a indicare il fatto che NomeFunzione è una funzione che non restituirà mai un valore.


Quello blu sta a indicare il fatto che NomeFunzione è una funzione che non riceve/richiama alcun valore.


Proviamo a creare un'altra funzione:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

In questo caso, subito prima di MiaFunzione, abbiamo messo INT perché la funzione in questione restituirà un valore INT (intero).

Sempre qui, abbiamo messo tra le parentesi tonde int a
Cosa significa? Semplicemente che la funzione MiaFunzione riceverà una variabile a sulla quale operare nel corso della sua inizializzazione.

Spero abbia capito :emoji_slight_smile:
 
Si, non stavo messo cosi male però ho capito ahah
Già lo sapevo che quello prima serve a restituire il valore e quello tra le parentesi serve a richiamare una costante/variabile, semplicemente non sapevo cosa significa void. Il pawn è molto simile (la base) come linguaggio, solo che ci sono varie differenze, ad esempio in questo caso su Pawn le funzioni vanno indicate semplicemente con:

new nome_funzione(variabili/costanti)

oppure

stock nome_funzione(variabili/costanti)

Mentre se la funzione è pubblica e vuoi richiamarla con CallLocalFunction o CallRemoteFunction devi usare il forward e il public:
forward nome_funzione(variabili/costanti);
public nome_funzione(variabili/costanti)
{
}

E sta a te decidere cosa farà tornare la funzione (se è una stringa ovviamente deve avere l'array), solo che da quel che so in molti hanno problemi con le stringhe, comunque ti ringrazio, ora capisco che alcune cose essenziali sono differenti :emoji_slight_smile:

Ultima cosa un po' generica, giusto per curiosità.
Io non ho mai fatto un programma vero e proprio, però non capisco come fanno i sviluppatori a fare certe cose, mischiano dei linguaggi insieme? O meglio: Si può usare sia il C che un altro linguaggio?
Perché non credo che per fare ad esempio l'interfaccia grafica e tutto, usino il C! Piuttosto devono usare più linguaggi (magari 2..), o no?
 
Ti sbagli.
I programmi in C possono avere interfaccia grafica. Semplicemente, vengono usate delle librerie grafiche chiamate API con le quali è possibile poi "creare" la GUI.
Il fatto che fino ad ora hai programmato in C con la classica finestra DOS molto spartana, ti è servito ad avere le fondamenta del linguaggio. Da lì, è poi possibile passare al livello successivo che è la grafica.
Che poi sia possibile interfacciarlo con altri programmi già compilati, questo è un altro discorso.