Oppure

Loading
19/08/11 17:23
cami
Ciao a tutti!

Sto imparando a programmare in C, ho un mac ed il mio compilatore e' xcode.
Devo scrivere un programma che mostra in sequenza sullo schermo il contenuto di tutti i files elencati nella barra dei comandi. Purtroppo non riesco a creare files nella barra dei comandi e di conseguenza non riesco a verificare se il codice e' giusto. Ho provato dal terminal del mac, i files creati risultano ma il programma non li legge. Probabilmente il codice non e' corretto e ho bisogno di un consiglio..Qualcuno di voi sa come fare? Grazie!

[#include <stdio.h>
#include <stdlib.h>

int main (int argc, char * argv[])
{
char ch;
int i;
FILE *fp;

for(i = 0; i < argc; i++)
if((fp = fopen(argv[ 1 ],"r";))==NULL) {
printf("Il file non si puo' aprire.\n";);
exit(1);
}

while((ch = fgetc( fp )) != EOF) {
printf("%c", ch);
}
fclose(fp);

return 0;
}]

edit x comina8: intanto ti ringrazio veramente per la pazienza! provero' a spiegarmi meglio perche' mi rendo condo che c'e' un pochino di confusione.
Non accedo al programma tramite il terminale dei comandi unix. In xcode e' possibile scrivere codici in c,compilarli ed eseguirli. Credo che il codice, con le modifiche eseguite con i tuoi consigli, sia corretto. Dov'e' il problema? Quando eseguo il run (non dal terminale dei comandi unix ma da xcode) dovrebbe apparimi una schermata che mostra tutti i files aperti in sequenza e questo non succede perche' all'interno della barra dei comandi di xcode non ci sono files da aprire che mi consentano di testare la funzionalita' del mio codice. Non riesco a capire come posso creare files nella barra dei comandi xcode ( da un terminal di unix userei un editor di testo) a prescindere dal codice che dovrebbe aprirli e mostrarli. Sono molto frustrata perche' so che e' una cosa in teoria molto semplice. Grazie ancora e ciao!
Ultima modifica effettuata da cami 20/08/11 16:36
aaa
19/08/11 18:24
comina8
Tu praticamente vuoi aprire i files che l'utente inserire come argomenti alla riga di comando, e stamparne il contenuto a video?

Allora il procedimento è giusto solo hai commesso qualche piccolo errore:

for(i=1; i<=argc; i++)

perché in argv[0] c'è il nome del programma stesso.

Seconda cosa all'inizio del for tu apri un file controllando appositamente che esista: nell'apertura tu passi come file da aprire sempre argv[1] mentre il risultato che penso volevi ottenere fosse argv[ i] cioè scorra gli argomenti come la i scorre nel for, analizzando quindi argv[1], argv[2] etc...

Il procedimento dopo (quello che riguarda la stampa è corretto) ma l'istruzione fclose(fp) la devi mettere prima della parentesi graffa che chiude il for, cosicché da chiudere ogni file dopo averlo effettivamente stampato e avere la possibilità di aprirne un altro...

EDIT: ho notato che il for in effetti non ha parentesi: le devi mettere dopo la riga for(...) e dopo la riga fclose.
Ultima modifica effettuata da comina8 19/08/11 18:25
aaa
20/08/11 8:58
comina8
Prima di tutto impara a spiegarti meglio perché altrimenti non si capisce una cippa...
Seconda cosa se devi inserire dei codici ti conviene editare il tuo primo post e usare i tag [cod e] e [/cod e] (senza spazi)...
Terza cosa tu vuoi creare un programma che, facendolo partire dalla linea di comando (o terminale) in questo modo:

programma.exe file1.txt file2.txt

In argv[0] ci sarà programma.exe, in argv[1] ci sara file1.txt ...
Naturalmente come stringhe...

Per quanto riguarda come aprirli mi pare di avertelo già spiegato...
aaa