PDA

Visualizza la versione completa : segmentation fault (core dumped)


jonsnow87
27-05-2008, 15:03
Ciao a tutti sono alle prime armi con la programmazione in c, e dopo aver compilato con successo il file in allegato, l'ho eseguito; il problema č che nel punto in cui c'č lo scambio tra l'elemnto pių alto nella matrice con l'elemento pių basso appare la scritta segmentation fault (core dumped), la cosa strana e che se inserisco dei numeri con 1 o 2 cifre il programma viene eseguito con successo, ma il 98% delle volte appare quel mex....Cosa posso fare?



#include<stdio.h>

# define N 6

/* inizio main */
main()
{
int mat[N][2], i, k, voto, matricola, min, max, x, y;

//inizio acquisizione dati
for(i=0; i<N; i++)
{
printf("\nInserire la matricola:\n");
scanf("%d", &mat[i][0]);
printf("\nInserire il voto:\n");
scanf("%d", &mat[i][1]);
}
//fine acquisizione dati

//inizio stampa 1
printf("\nStampa della matrice inserita\n");
printf("\nmat voto\n");
for(i=0; i<N; i++)
printf("%d %d\n", mat[i][0], mat[i][1]);
//fine stampa 1

//inserimento voto da cercare
do
{
printf("\nInserire un voto da cercare compreso tra 18 e 30\n");
scanf("%d", &voto);
}
while(voto<18 || voto>30);
//fine inserimento

//inizio ricerca per voto
k=0; //valore bandiera
printf("\nMatricole che hanno ottenuto %d:\n",voto);
for(i=0; i<N; i++)
{
if(mat[i][1]==voto)
{
k=1;
printf("%d\n", mat[i][0]);
}
}
if(k==0)
printf("Nessuna!\n");
//fine ricerca per voto

//inserimento matricola da cercare
printf("\nInserire la matricola da cercare\n");
scanf("%d", &matricola);
//fine inserimento

//inizio ricerca per matricola
k=0; //valore bandiera
printf("\nLa mat. %d ha conseguito l'esame?:\n",matricola);
for(i=0; i<N && k==0; i++)
{
if(mat[i][0]==matricola)
{
k=1;
printf("Esame sostenuto!\n");
}
}
if(k==0)
printf("Esame non sostenuto!\n");
//fine ricerca per matricola

//scambio matricola pių alta con pių bassa
min=mat[0][0];
max=mat[0][0];
for(i=1; i<N; i++)
{
if(min>mat[i][0])
{
min=mat[i][0];
x=mat[i][1];
}
if(max<mat[i][0])
{
max=mat[i][0];
y=mat[i][1];
}
}

mat[x][0]=max;
mat[x][1]=y;

mat[y][0]=min;
mat[y][1]=x;
//fine scambio matricole

//inizio stampa 2
printf("\nStampa della matrice ottenuta\n");
printf("\nmat voto\n");
for(i=0; i<N; i++)
printf("%d %d\n", mat[i][0], mat[i][1]);
//fine stampa 2


}
/* fine main */

LeleFT
27-05-2008, 15:07
Anche per te le stesse considerazioni fatte qui (http://forum.html.it/forum/showthread.php?s=&postid=11658947#post11658947).


Correggo e metto a posto.


Ciao. :ciauz:

oregon
27-05-2008, 15:13
Nello scambio, se il minimo č il primo elemento, x quanto vale?

MacApp
27-05-2008, 15:32
Non controlli i valori di x ed y. Quindi quando l'utente inserisce un numero maggiore di 5, hai un comportamento indefinito per sforamento vettore.

Loading