bart_simpson Δημοσ. 14 Ιανουαρίου 2007 Δημοσ. 14 Ιανουαρίου 2007 Εχω μια εργασια στην C, να φτιαξω το sudoku..που την εχω ολοκληρωσει εκτος απο ενα μικρο σημειο. Θελει οι πινακες να διαβαζονται απο αρχειο. Μπορει κανεις να μου πει πως γινεται?
chiossif Δημοσ. 14 Ιανουαρίου 2007 Δημοσ. 14 Ιανουαρίου 2007 Αν γράψεις το lolo.c έτσι: > #include <stdio.h> int main(void){ int a,b; scanf("%d %d",&a,&; printf("%d",a+; return 0; } και το τρέξεις έτσι: > lolo <input.txt >output.txt τότε το λειτουργικό σου θα διαβάσει τα a,b από το ένα αρχείο και θα γράψει το αποτέλεσμα στο άλλο. Το ίδιο αποτέλεσμα (ΑΚΡΙΒΩΣ?) έχεις και με αυτό το lolof.c: > #include <stdio.h> int main(void){ FILE *fpin, *fpout; int a,b; fpin=fopen("input.txt","r"); if (fpin==NULL) exit(1); fpout=fopen("output.txt","w"); if (fpout==NULL) exit(1); fscanf(fpin,"%d %d",&a,&; fprintf(fpout,"%d",a+; fclose(fpin); fclose(fpout); return 0; } μόνο που αυτή την φορά αρκεί να το τρέξεις μόνο με το όνομά του αφού τα αρχεία να ανοιγο-διαβαζο-γραφο-κλείνεις εσύ. Τώρα για έναν πίνακα 9x9 θα πρότεινα κάτι τέτοιο: > /*.......*/ int a[9][9], i, j; for (i=0;i<9;i++) for (j=0;j<9;j++) scanf("%d",&a[i][j]); for (i=0;i<9;i++){ for (j=0;j<9;j++) printf("%8d",a[i][j]); printf("\n"); } /*.......*/ Ελπίζω να βοήθησα (και φυσικά να είναι σωστά διότι ΔΕΝ τα δοκίμασα...)
xpapias Δημοσ. 14 Ιανουαρίου 2007 Δημοσ. 14 Ιανουαρίου 2007 >#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int t,i; char string[10]; int pinakas[9][9]; FILE *fl = fopen ("Sudoku.txt","r"); if (fl==NULL) return 1; for (t=0;t<=8;t++) { fscanf (fl,"%s",&string); printf("%s\n",string); for (i=0;i<9;i++) pinakas[t][i]=string[i]-48; } fclose(fl); for (t=0;t<9;t++) { for (i=0;i<9;i++) { printf("%d ",pinakas[t][i]); } printf("\n"); } return 0; } Τι κάνει: -Ανοίγει το αρχείο sudoku.txt που είναι στο φάκελο από τον οποίο εκτελείται το πρόγραμμα. Το αρχείο αυτό αποτελείται από 9 γραμμές συνολικά. Καθεμία είναι της μορφής 954231786. Το αρχείο αυτό το φτιάχνεις από το notepad. -Διαβάζει το αρχείο γραμμή-γραμμή και αποθηκεύει προσωρινά το περιεχόμενο της γραμμής στο string (σύνολο από chars) -Διαβάζει χαρακτήρα-χαρακτήρα το string και αποθηκεύει κάθε αριθμό στον πίνακα pinakas με τη μορφή [y][x]. Η αποθήκευση εκμεταλλεύεται το σύστημα ascii οπου ο αριθμός 0 έχει τον κωδικό 48, ο αριθμός 1 έχει τον κωδικό 49 κ.ο.κ. Πρόσεξε επίσης ότι ο πίνακας ξεκινάει από το στοιχείο 0 και φτάνει στο στοιχείο 8 για τα x και y -Στη συνέχεια κλείνει το αρχείο με την εντολή fclose -Τέλος (απλά το έβαλα για τεστάρισμα) τυπώνει κάθε στοιχείο του πίνακα. Είναι δοκιμασμένο.
bart_simpson Δημοσ. 14 Ιανουαρίου 2007 Μέλος Δημοσ. 14 Ιανουαρίου 2007 Παιδια σας ευχαριστω και τους δυο.
bart_simpson Δημοσ. 16 Ιανουαρίου 2007 Μέλος Δημοσ. 16 Ιανουαρίου 2007 μια τελευταια ερωτηση.. δοκιμασα αυτο που λεει ο xpapias και δουλευει τελεια.! τι πρεπει να προσθεσω στον κωδικα του, ετσι ωστε να διαβαζει κατευθειαν απο 2 αρχεια,και να τα αποθηκευει σε 2 διαφορετικους πινακες?
Sta Δημοσ. 16 Ιανουαρίου 2007 Δημοσ. 16 Ιανουαρίου 2007 Χρησιμοποίησε τις μεταβλητές pinakas2, fl2 κ.τλ. αντιστοίχως με τις pinakas, fl ώστε να διαβάζεις ταυτόχρονα από δύο αρχεία.
xpapias Δημοσ. 17 Ιανουαρίου 2007 Δημοσ. 17 Ιανουαρίου 2007 >#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int t,i; char string1[10],string2[10]; int pinakas1[9][9],pinakas2[9][9]; FILE *fl1 = fopen ("Sudoku1.txt","r"); FILE *fl2 = fopen ("Sudoku2.txt","r"); if (fl1==NULL || fl2==NULL) return 1; for (t=1;t<=9;t++) { fscanf (fl1,"%s",&string1); fscanf (fl2,"%s",&string2); for (i=0;i<9;i++) pinakas1[t-1][i]=string1[i]-48; for (i=0;i<9;i++) pinakas2[t-1][i]=string2[i]-48; } fclose(fl1); fclose(fl2); for (t=0;t<9;t++) { printf ("PIN1-GRAMMH%d-->",t+1); for (i=0;i<9;i++) { printf("%d ",pinakas1[t][i]); } printf (" PIN2-GRAMMH%d-->",t+1); for (i=0;i<9;i++) { printf("%d ",pinakas2[t][i]); } printf("\n"); } return 0; } Εννοείται ότι θα φτιάξεις τα αρχεία sudoku1.txt και sudoku2.txt όπως ακριβώς και την προηγούμενη φορά.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.