PDA

Visualizza la versione completa : [C] Problema durante esecuzione programma


ciro_90
04-02-2010, 23:57
Salve ho un problema... sto scrivendo un programma sui file di testo che in pratica data una matrice letta in input da file.txt ci stampi a video il valore massimo della matrice e su un file di output la matrice stessa...il programma viene compilato bene ma perchè all'atto della sua esecuzione crasha??? Questo è il mio codice e grazie per le risposte che riceverò


const int max_dim=100;
typedef int vettore [max_dim];
typedef vettore matrice[max_dim];

void leggi_mat(matrice, int &, int &, const char*);
int ricerca_max(matrice, int, int, vettore);
void stampa(matrice, int, int, const char*);




#include <stdio.h>
#include <stdlib.h>
#include "lib.h"

int main()
{
int riga, colo;
matrice mat;
int massimo;
vettore v;

leggi_mat(mat, riga, colo, "input.txt");
massimo = ricerca_max(mat,riga,colo, v);
printf("il massimo valore della matrice e' /n/n");
printf("%d", massimo);

stampa(mat, riga, colo, "output.txt");

system("PAUSE");
return 0;

}




#include <stdio.h>
#include <stdlib.h>
#include "lib.h"

void leggi_mat(matrice mat, int &riga, int &colo, const char *nomefile)
{
int i,j;
FILE* fp=fopen(nomefile, "r");

if(!fp)
{
printf("file non trovato impossibile continuare /n/n");
system("PAUSE");
exit(1);
}

fscanf(fp, "%d", riga);
fscanf(fp, "%d", colo);

for(i=0;i<riga;i++)
for(j=0;j<colo;j++)
fprintf(fp, "%d", mat[i][j]);

}


int ricerca_max (matrice mat, int riga, int colo, vettore v)
{
int i,j;
int posmax;
int massimo;

for(i=0;i<riga;i++)
{
posmax=mat[i][0];
for(j=1;j<colo;j++)
{
if(mat[i][j]>posmax)
{
posmax=mat[i][j];
v[i]=mat[i][j];
}

}

}

massimo=v[0];
for(i=0;i<colo;i++)
{
if(v[i]>massimo)
massimo=v[i];

}


return massimo;
}


void stampa(matrice m, int riga, int colo, const char *nomefile)
{
int i,j;
FILE* fp=fopen(nomefile, "w");

if(!fp)
{
printf("file non trovato impossibile continuare /n/n");
system("PAUSE");
exit(1);
}

for(i=0;i<riga;i++)
for(j=0;j<colo;j++)
fprintf(fp, "%d", m[i][j]);

}

c_junior
05-02-2010, 00:09
int riga, colo;
matrice mat;
int massimo;
vettore v;

leggi_mat(mat, riga, colo, "input.txt");

intanto potresti mettere qualche cout da qualche parte per vedere anche te dov'è l'errore!!!!

e cmq non vorrei dire una stupidata ma mat,rica,colo non sono inizializzati quindi dovrebbe essere questo il problema!

ciro_90
05-02-2010, 00:13
no ho inizializzato ma niente da fare...sto perdendo la testa da un pò a capire U_U

MacApp
05-02-2010, 12:12
Originariamente inviato da ciro_90



void leggi_mat(matrice mat, int &riga, int &colo, const char *nomefile)



In C questo codice NON è compilabile, a meno di strambe direttive di compilazione, (perché in C non ci sono i riferimenti).

ciro_90
05-02-2010, 12:16
io ho fatto un altro programma sempre in c e con i file e ho passato una variabile per riferimento viene eseguito a meraviglia O__O

ciro_90
05-02-2010, 12:20
anche eliminando i riferimenti il file eseguibile crasha uffà non so più che pesci pigliare :dhò:

oregon
05-02-2010, 13:15
Originariamente inviato da ciro_90
io ho fatto un altro programma sempre in c e con i file e ho passato una variabile per riferimento viene eseguito a meraviglia O__O

In C non esiste il concetto di riferimento. Quindi, senza saperlo, lo hai compilato come se fosse C++.

Comunque, se inserisci delle

cout

oppure delle

printf

nel codice, puoi vedere in quale riga o funzione hai il crash ...

Questo fatto facilitirebbe la ricerca del problema invece di costringere chi ti risponde a dovere copiare tutto il codice e compilarlo ... anche nel tuo interesse.

c_junior
05-02-2010, 13:19
Originariamente inviato da ciro_90
printf("il massimo valore della matrice e' /n/n");


guarda che per andare a capo la sbarra della n deve essere nel verso opposto...'\n' e non '/n'


e cmq il problema sembra sia dato da:


fscanf(fp, "%d", riga); fscanf(fp, "%d", colo);

oregon
05-02-2010, 13:29
Sicuramente, nella fscanf, la variabile non si usa così ...

ciro_90
05-02-2010, 16:21
Ho risolto tutti i problemi ora funziona alla grande e ho fatto come dite voi che invece di scervellarmi metto delle printf per vedere i dati come vengono modificati...beh ho ancora da imparare...questo è il nuovo codice funzionante:


const int max_dim=100;
typedef int vettore [max_dim];
typedef vettore matrice[max_dim];

void leggi_mat(matrice, int &, int &, const char*);
int ricerca_max(matrice, int, int, vettore);
void stampa(matrice, int, int, const char*);






#include <stdio.h>
#include <stdlib.h>
#include "lib.h"

int main()
{
int riga=0, colo=0;
matrice mat;
vettore v;
int mass;

leggi_mat(mat, riga, colo, "input.txt");
mass = ricerca_max(mat,riga,colo, v);
printf("il valore massimo e' %d \n\n", mass);
stampa(mat, riga, colo, "output.txt");

system("PAUSE");
return 0;

}






#include <stdio.h>
#include <stdlib.h>
#include "lib.h"

void leggi_mat(matrice mat, int &riga, int &colo, const char *nomefile)
{
int i,j;
FILE* fp=fopen(nomefile, "r");

if(!fp)
{
printf("file non trovato impossibile continuare \n\n");
system("PAUSE");
exit(1);
}

fscanf(fp, "%d", &riga);
fscanf(fp, "%d", &colo);
printf("valore di riga %d \n" ,riga);
printf("valore di colonna %d \n" ,colo);

for(i=0;i<riga;i++)
{
for(j=0;j<colo;j++)
{
fscanf(fp, "%d", &mat[i][j]);
printf("valori matrice %d \n\n", mat[i][j]);

}

}
}

int ricerca_max (matrice mat, int riga, int colo, vettore v)
{
int i,j;
int max_mat;
int mass=-100;
printf("valore massimo %d \n", mass);


for(i=0;i<riga;i++)
{
max_mat=mat[i][0];
printf("valore del massimo %d\n\n", max_mat);


for(j=1;j<colo;j++)
{

if(mat[i][j]>max_mat)
{
max_mat=mat[i][j];
printf("valore massimale %d \n\n",max_mat);
v[i]=mat[i][j];
printf("valore massimo inserito nel vettore %d \n\n", v[i]);


}

}

}

mass=v[0];
printf("il massimo valore e' %d \n\n" ,mass);
for(i=0;i<colo;i++)
{
if(v[i]>mass)
mass=v[i];

}

return mass;

}


void stampa(matrice m, int riga, int colo, const char *nomefile)
{
int i,j;
FILE* fp=fopen(nomefile, "w");

if(!fp)
{
printf("file non trovato impossibile continuare \n\n");
system("PAUSE");
exit(1);
}

for(i=0;i<riga;i++)
for(j=0;j<colo;j++)
fprintf(fp, "valori della matrice %d \n\n", m[i][j]);



Ciau e grazie per l'aiuto che mi avete dato :) :ciauz:

Loading