[C] domanda sulle funzioni e stringhe
ciao .
mi date un ochiata al programma che ho fatto ?
che non mi funziona .
in pratica la funzione deve passare una stringa al programma
non devo usare fgetc ?
cosa c'e che non va ?
grazie
mi date un ochiata al programma che ho fatto ?
che non mi funziona .
// esempio di passaggio di parametri (di caratteri char) #include<stdio.h> #define MAX_SIZE 30 main() { char stringa1[MAX_SIZE]; funzione(3, stringa1); // associato per ordine non per il nome (parametri attuali) printf("Stringa letta da file: %s\n", stringa1); } //----------------------------------------------------------------- void funzione(int numero, char stringa[]) // associato per ordine non per il nome (parametri formali) { char stringa2[MAX_SIZE] = "Questa e una stringa \n"; // stringa letta da dove cavolo vuoi (tipo letta da file) int i = 0; // i = contatore while ((stringa[i++] = fgetc(stringa2)) != '\n'); stringa[i] = '\0'; return; }
in pratica la funzione deve passare una stringa al programma
/* int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...); int sscanf(const char *str, const char *format, ...); /*
non devo usare fgetc ?
cosa c'e che non va ?
grazie
Risposte
Qual'è esattamente il testo dell'esercizio?
Ci sono tantissimi problemi nel codice che hai postato.
Nella vecchia versione del C era permesso non scrivere il tipo di ritorno di una funzione, che era int di default. Non è però più permesso nell'ultimo standard e in C++ e quindi ti consiglio di scrivere
Stai lavorando in C++? Nel vecchio standard del C questo genere di commenti non è accettato ed è sfortunatamente lo standard più supportato del linguaggio. In C è quindi meglio usare i commenti nella forma /**/.
A cosa serve numero? Non lo usi nella funzione...
Non capisco il senso di questa stringa.
Cerca di scrivere il codice nel modo più comprensibile possibile visto che stai imparando. In questa riga di codice hai messo una quantità enorme di operazioni che è meglio mettere in righe separate. Inoltre fgetc NON legge i caratteri da una stringa ma da file. Perché hai quindi passato stringa2 come argomento alla funzione?! Che cosa dovrebbe fare secondo il testo dell'esercizio questa funzione?
Il return in una funzione void non serve, avresti invece dovuto mettere "return 0;" nel main (a meno di lavorare in C++).
Ci sono tantissimi problemi nel codice che hai postato.
main()
Nella vecchia versione del C era permesso non scrivere il tipo di ritorno di una funzione, che era int di default. Non è però più permesso nell'ultimo standard e in C++ e quindi ti consiglio di scrivere
int main()
funzione(3, stringa1); // associato per ordine non per il nome (parametri attuali)
Stai lavorando in C++? Nel vecchio standard del C questo genere di commenti non è accettato ed è sfortunatamente lo standard più supportato del linguaggio. In C è quindi meglio usare i commenti nella forma /**/.
void funzione(int numero, char stringa[]) // associato per ordine non per il nome (parametri formali)
A cosa serve numero? Non lo usi nella funzione...
char stringa2[MAX_SIZE] = "Questa e una stringa \n"; // stringa letta da dove cavolo vuoi (tipo letta da file)
Non capisco il senso di questa stringa.
while ((stringa[i++] = fgetc(stringa2)) != '\n');
Cerca di scrivere il codice nel modo più comprensibile possibile visto che stai imparando. In questa riga di codice hai messo una quantità enorme di operazioni che è meglio mettere in righe separate. Inoltre fgetc NON legge i caratteri da una stringa ma da file. Perché hai quindi passato stringa2 come argomento alla funzione?! Che cosa dovrebbe fare secondo il testo dell'esercizio questa funzione?
return;
Il return in una funzione void non serve, avresti invece dovuto mettere "return 0;" nel main (a meno di lavorare in C++).
si in realta il programma lo fatto con il c e non con il c++
perche per compilare uso il GCC, (the GNU Compiler Collection) dalla shell con ubuntu .
in realta non conosco nessun programma gratuito di compilazione in c++ per windows
praticamente mi serve un programma di esempio .
voglio fare una funzione che mi restituisca una stringa !
il while mi serve per associare la variabile al puntatore.
Poi il programma lo completo , creo una variabile
da una riga di un file . O da qualsiasi parte .
la funzione me la restituisce al programma principale il main
il programma originale non prevedeva fgetc ma getchar() e
leggeva l'input direttamente dallo stdin (standard input)
ma con fgetc non funziona corettamente.
secondo te non si fa cosi ??
mi dai alcuni consigli come si puo fare
grazie luca
perche per compilare uso il GCC, (the GNU Compiler Collection) dalla shell con ubuntu .
in realta non conosco nessun programma gratuito di compilazione in c++ per windows
praticamente mi serve un programma di esempio .
voglio fare una funzione che mi restituisca una stringa !
#include<stdio.h> #define MAX_SIZE 30 main() { char stringa1[MAX_SIZE]; funzione(3, stringa1); // associato per ordine non per il nome (parametri attuali) printf("Stringa letta da file: %s\n", stringa1); } void funzione(int numero, char *stringa) // associato per ordine non per il nome (parametri formali) { char stringa2[MAX_SIZE] = "Questa e una stringa \n"; // stringa letta da dove cavolo vuoi (tipo letta da file) int i = 0; // i = contatore while ((stringa[i++] = fgetc(&stringa2)) != '\n'); stringa[i] = '\0'; }
il while mi serve per associare la variabile al puntatore.
Poi il programma lo completo , creo una variabile
da una riga di un file . O da qualsiasi parte .
la funzione me la restituisce al programma principale il main
il programma originale non prevedeva fgetc ma getchar() e
leggeva l'input direttamente dallo stdin (standard input)
ma con fgetc non funziona corettamente.
secondo te non si fa cosi ??
mi dai alcuni consigli come si puo fare
grazie luca
getchar è quasi del tutto equivalente a fgetc(stdin). Se sostituisci uno all'altro dovrebbe funzionare senza problemi anche se non ha particolare senso. Inoltre puoi più semplicemente ancora usare la funzione fgets che legge una riga di testo da file. La seguente legge una riga di testo da console di dimensione al massimo MAX_SIZE e la scrive in stringa:
Sostituisce quindi del tutto il tuo ciclo (che non controlla la dimensione della stringa letta e quindi potrebbe portare ad un crash del programma.
Visual C++ Express è gratuito su Windows.
fgets(stringa, MAX_SIZE, stdin);
Sostituisce quindi del tutto il tuo ciclo (che non controlla la dimensione della stringa letta e quindi potrebbe portare ad un crash del programma.
Visual C++ Express è gratuito su Windows.
in pratica questo esempio sarebbe piu esplicativo !!
praticamente non so assocare la variabile stringa2 al puntatore in uscita *stringa della funzione
grazie
#include<stdio.h> #define MAX_SIZE 30 void funzione(char *stringa1, char *stringa) // associato per ordine non per il nome (parametri formali) { char stringa2[MAX_SIZE] = "ciao mario \n"; // stringa letta da dove cavolo vuoi (tipo letta da file) in uscita sarebbe int i = 0; // i = contatore while ((stringa[i++] = getchar()) != '\n'); // devo associare alla stringa2 al psto di getchar() stringa[i] = '\0'; } main() { char stringa1[MAX_SIZE]; char stringa2[MAX_SIZE] = "ciao \n"; // stringa in entrata input (tipo da standard input) funzione(stringa2, stringa1); // associato per ordine non per il nome (parametri attuali) printf("Stringa letta da file: %s\n", stringa1); }
praticamente non so assocare la variabile stringa2 al puntatore in uscita *stringa della funzione
grazie
Che intendi con associare? Se intendi la copia (la stringa contenuto in un array è uguale a quello del secondo) allora è sufficiente qualcosa come:
oppure usare strcpy (o funzioni simili).
Ma il tuo codice non ha molto senso. Il parametro stringa1 non viene usato e neanche l'array locale stringa2 (in entrambe le funzioni). Non credo che associare sia il termine corretto per quello che vuoi fare. Stai forse parlando di assegnamento?
for (i = 0; stringa2[i] != '\0'; ++i) { stringa[i] = stringa2[i]; }
oppure usare strcpy (o funzioni simili).
Ma il tuo codice non ha molto senso. Il parametro stringa1 non viene usato e neanche l'array locale stringa2 (in entrambe le funzioni). Non credo che associare sia il termine corretto per quello che vuoi fare. Stai forse parlando di assegnamento?
grazie per la risposta !
era proprio quello che cercavo !
anche se mi sono spiegato male .
io intendevo proprio la copia .
il parametro stringa1 e stringa2 non le ho usate .
il programma che ho fatto era solo un esempio per capire come si faceva la copia
ciao luca
era proprio quello che cercavo !
anche se mi sono spiegato male .
io intendevo proprio la copia .
il parametro stringa1 e stringa2 non le ho usate .
il programma che ho fatto era solo un esempio per capire come si faceva la copia
ciao luca