Προς το περιεχόμενο

εισαγωγη απο αρχειο στην C


bart_simpson

Προτεινόμενες αναρτήσεις

Δημοσ.

Εχω μια εργασια στην C, να φτιαξω το sudoku..που την εχω ολοκληρωσει εκτος απο ενα μικρο σημειο.

Θελει οι πινακες να διαβαζονται απο αρχειο.

Μπορει κανεις να μου πει πως γινεται?

Δημοσ.

Αν γράψεις το 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");
 }
/*.......*/

 

Ελπίζω να βοήθησα (και φυσικά να είναι σωστά διότι ΔΕΝ τα δοκίμασα...)

Δημοσ.

>#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

-Τέλος (απλά το έβαλα για τεστάρισμα) τυπώνει κάθε στοιχείο του πίνακα.

 

Είναι δοκιμασμένο.

Δημοσ.

μια τελευταια ερωτηση..

δοκιμασα αυτο που λεει ο xpapias και δουλευει τελεια.!

τι πρεπει να προσθεσω στον κωδικα του, ετσι ωστε να διαβαζει κατευθειαν απο 2 αρχεια,και να τα αποθηκευει σε 2 διαφορετικους πινακες?

Δημοσ.

Χρησιμοποίησε τις μεταβλητές pinakas2, fl2 κ.τλ. αντιστοίχως με τις pinakas, fl ώστε να διαβάζεις ταυτόχρονα από δύο αρχεία.

Δημοσ.

>#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 όπως ακριβώς και την προηγούμενη φορά.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...