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

print matrix


panayiotispatra

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

Δημοσ.

Γιατί δεν μου διαβάζει ο file που του δίνω από την γραμμή εντολών.

Σας δίνω το κομμάτι που νομίζω ότι βρίσκεται το πρόβλημα. Αν μπορεί κάποιος να βοηθήσει.

Σκοπός του συγκεκριμένου είναι να εκτυπώσω ένα text file για sudoku

 

 

void printMatrix(int array[9][9])

{

char filename[30];

FILE *fp;

int i,j,z;

fp=fopen(filename,"r");

if(fp==NULL)

{

printf("Cannot open file!\n");

 

}

while((z=fgetc(fp))!=EOF){

 

printf("|-|-|-|-|-|-|-|-|-|\n");

for(i=0;i<9;i++)

{

for(j=0;j<=9;j++)

{

z = fgetc(fp);

 

printf("|%c",z);

 

array[j] = z;

 

}

}

printf("\n");

printf("|-|-|-|-|-|-|-|-|-|\n");

}

}

 

 

Μου βγάζη το error

Cannot open file!

12 [main] a 3128 _cygtls::handle_exceptions: Error while dumping state (pro

bably corrupted stack)

Segmentation fault (core dumped)

Δημοσ.

Πού ακριβώς περνάς το file σαν όρισμα?

 

void printMatrix(int array[9][9])

{

char filename[30];

FILE *fp;

int i,j,z;

fp=fopen(filename,"r");

if(fp==NULL)

...

 

Απο το κομμάτι του κώδικα που έδωσες δεν βλέπω να παίρνει τιμή κάπου το filename

Δημοσ.

Θεωρώ πως θα πρέπει να φτιάξεις μία συνάρτηση που θα διαβάζει αρχικά από ένα αρχείο το Sudoku σου και κατόπιν έχοντας διαβάσει μέσα στον πίνακα τις τιμές του puzzle από το αρχείο με μία διαφορετική συνάρτηση να τυπώνεις το puzzle.Δεν είναι καλή πρακτική έτσι όπως το πας, γνώμη μου, imho!!!

Δημοσ.

Το file το ορίζω στην αρχη

 

int main (int argc, char *argv[])

{

int X, Y, val;

int isInterrupted = 0;

int sudoku[9][9];

FILE *fp;

/* Sanity Check - Check the existence of the command-line argument */

if (argc < 2) {

printf("Usage: %s <input-file>\n", argv[0]);

exit(1);

}

 

/* Opening the specified input file in read mode*/

if ( (fp = fopen (argv[1], "r")) == NULL) {

printf ("Failed to open the input file '%s'.\n", argv[1]);

exit(EXIT_FAILURE);

}

.

.

.

.

Δημοσ.

Είσαι έτοιμος, απλά να φροντίσεις στον φάκελο που έχεις τα αρχεία κώδικα δηλαδή τα .c να βάλεις στο debug φάκελο ή γενικά αν δεν δουλέψει το αρχείο κειμένου sudoku.txt για να το βρει το πρόγραμμα και να δουλέψει γιατί αλλιώς θα σου λέει ότι δεν βρίσκει το αρχείο.

 

>

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

#define N 9


/* Read a Sudoku file in an input array. */

int ReadSudokuPuzzle(const char *filename, int Sudoku[][N])
{
   if(!filename)
   {
                fprintf(stderr,"Error: ReadSudokuPuzzle(): Enter a valid file name.\n");
                return -1;
   }
   else
   {
       FILE *file = NULL;
       int i = 0,j = 0;
       if((file = fopen(filename, "rt")) == NULL)
       {
                fprintf(stderr,"Error: ReadSudokuPuzzle(): Can not open '%s' file.\n", filename);
                return -2;
       }
       else
       {
           while(fscanf(file, "%d", &Sudoku[i][j]) != EOF)
           {
                              j++;
                              if(j == N)
                              {
                                   i++;
                                   j = 0;
                              }
           }
           /* Close file. */
           fclose(file);
           return 0;
       }
   }
}

/* Print Sudoku in stdin. */

void PrintSudoku(int Sudoku[][N])
{
    int i, j;
    printf("-------Sudoku Puzzle--------\n\n");
    for(i = 0; i < N; i++)
    {
          printf("|--|--|--|--|--|--|--|--|--|\n");
          for(j = 0; j < N; j++)
          {
                printf(" %d ", Sudoku[i][j]);
          }
          printf("\n");
    }
    printf("|--|--|--|--|--|--|--|--|--|\n");
    printf("\n");
}

/* Write Sudoku to a file. */

int WriteSudokuPuzzle(char *filename, int Sudoku[][N])
{
   if(!filename)
   {
                fprintf(stderr,"Error: WriteSudokuPuzzle(): Enter a valid file name.\n");
                return -1;
   }
   else
   {
       FILE *file = NULL;
       int i = 0,j = 0;
       if((file = fopen(filename, "wt")) == NULL)
       {
                fprintf(stderr,"Error: WriteSudokuPuzzle(): Can not open '%s' file.\n", filename);
                return -2;
       }
       else
       {
           fprintf(file,"%s", "-------Sudoku Puzzle--------\n\n");
           for(i = 0; i < N; i++)
           {
                 fprintf(file, "%s", "|--|--|--|--|--|--|--|--|--|\n");
                 for(j = 0; j < N; j++)
                 {
                       fprintf(file," %d ", Sudoku[i][j]);
                 }
                 fputc('\n', file);
           }
           fprintf(file, "%s", "|--|--|--|--|--|--|--|--|--|\n\n");
           fclose(file);
           return 0;
       }
   }
}

/* Main code. */

int main(int argc, char **argv)
{
   /* Global Sudoku Array. */
   int Sudoku[N][N] = {{0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0},
   {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}};
   /* */
   ReadSudokuPuzzle("sudoku.txt", Sudoku);
   PrintSudoku(Sudoku);
   WriteSudokuPuzzle("output.txt", Sudoku);
   printf("Hit enter to continue....\n");
   getchar();
}

 

Sudoku.txt

 

0 0 0 0 0 4 6 7 2

2 3 0 0 0 0 0 0 1

1 0 0 0 0 0 0 0 4

6 0 0 0 0 3 0 0 7

9 0 2 0 0 0 0 4 5

5 6 7 8 0 0 0 0 0

0 0 0 0 0 0 0 6 0

4 5 0 0 0 0 7 0 0

1 2 3 7 0 0 0 0 9

Δημοσ.
Το file το ορίζω στην αρχη

 

int main (int argc, char *argv[])

{

int X, Y, val;

int isInterrupted = 0;

int sudoku[9][9];

FILE *fp;

/* Sanity Check - Check the existence of the command-line argument */

if (argc < 2) {

printf("Usage: %s <input-file>\n", argv[0]);

exit(1);

}

 

/* Opening the specified input file in read mode*/

if ( (fp = fopen (argv[1], "r")) == NULL) {

printf ("Failed to open the input file '%s'.\n", argv[1]);

exit(EXIT_FAILURE);

}

.

.

.

.

 

Εφόσον το αρχείο το ανοίγεις μέσα στην main() και όχι μέσα στις συναρτήσεις κάθε φορά, όπως και σωστά αλλά όχι απαραίτητα πράττεις, τότε στην printMatrix θα πρέπει να την ορίσεις έτσι:

void PrintMatrix(int Array[][9], FILE *file)

{

}

 

και όταν στην main() την καλέσεις την καλείς ώς:

 

PrintMatrix(Sudoku, fp);

 

Βέβαια να θυμάσαι ότι μέσα στην συνάρτηση που θα ορίσεις δεν θα πρέπει να ξανανοίγεις το αρχείο αλλά να το θεωρείς ανοιχτό γιατί το έχεις ήδη άνοιξει μέσα στην main() συνάρτηση σου σαν global αρχείο.

Δηλαδή εφόσον έχεις κάνει αυτό:

if ( (fp = fopen (argv[1], "r")) == NULL) {

printf ("Failed to open the input file '%s'.\n", argv[1]);

exit(EXIT_FAILURE);

δεν χρειάζεται να κάνει αυτό μέσα στην συνάρτηση:

char filename[30];

FILE *fp;

int i,j,z;

fp=fopen(filename,"r");

if(fp==NULL)

{

printf("Cannot open file!\n");

 

}

 

Ελπίζω να βοήθησα.

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

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

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