El problema es que despues de simular la caida, vuelve al menu, y sin hacer nada parece que vuelve a entrar en la opción de la caida y a la que se introduce cualquier dato, sale "segmentation fault", como puedo arreglar-lo?
Código
#include<stdio.h> //int disparos_pos[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //char disparos_dir[10]= {'i','i','d','i','d','d','i','d','d','i'}; int n,i,j; int bola; int testbola=3; char testdirec='d'; void mblanc (int tabla [10][10]); void caiguda (int tabla [10][10]); void ncaiguda (int tabla [10][10]); void estadist (int tabla [10][10]); void menu(void); main(){ int opcion; int tabla[10][10] = { {0,0,0,0,0,0,0,0,0,0}, {1,0,0,0,0,0,0,1,0,0}, {0,1,0,0,0,0,1,0,0,0}, {0,0,1,0,0,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,1}, {0,0,0,0,0,0,0,0,1,0}, {0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,0,1,0,0,0,0}, {0,1,0,0,0,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0} }; do{ printf("------------------------MENU----------------------------- \n"); printf("1- Visualizar el contenido de la tabla de obstáculos por pantalla \n"); printf("2- Visualizar e stadidisticas de la tabla \n"); printf("3- Simuluar la caída de una pelota \n"); printf("4- Simular la caída de 10 pelotas \n"); printf("5- Salir \n"); printf("introduce tu opcion: "); scanf ("%d",&opcion); switch(opcion){ case 1: printf("Esta es la tabla: \n"); mblanc(tabla); break; case 2: break; case 3: caiguda(tabla); ncaiguda(tabla); break; case 4: //caiguda(tabla); //ncaiguda(tabla); break; case 5: printf("Adios"); break; default: printf("Opción incorrecta \n"); printf("Introduce un numero entre el 1 y el 5 \n"); break; } }while(opcion!=5); } void mblanc (int tabla [10][10]){ for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(tabla[i][j]==0){ printf(" "); } if(tabla[i][j]==1){ printf("*"); } } printf("\n"); } } void caiguda (int tabla [10][10]){ int posicion; char direccion; int cont=2; printf("Indica la posicion desde la que cae la bola \n"); scanf ("%d",&posicion); printf("Indica la direccion en la que gira la bola:"); scanf("%c",&direccion); printf(" \n"); tabla[0][posicion] = cont; for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(j==posicion){ if(tabla[i+1][posicion]==0){ //nada debajo cont++; tabla[i+1][posicion]=cont; } else/*(tabla[i+1][posicion]==1)*/{ //algo debajo if(tabla[i+2][posicion]==1){ //vertical if(direccion=='d'){ cont++; posicion++; tabla[i][posicion]=cont; j=0; } if(direccion=='i'){ cont++; posicion--; tabla[i][posicion]=cont; j=0; } } if(tabla[i+1][posicion+1]==1 || tabla[i+1][posicion-1]==1){ //recta if(direccion=='d'){ cont++; posicion++; tabla[i][posicion]=cont; j=0; } if(direccion=='i'){ cont++; posicion--; tabla[i][posicion]=cont; j=0; } } if(tabla[i][posicion-1]==1 || tabla[i+2][posicion+1]==1){ //diagonal cont++; posicion++; direccion = 'd'; tabla[i][posicion]=cont; j=0; } if(tabla[i][posicion+1]==1 || tabla[i+2][posicion-1]==1){ //diagonal cont++; posicion--; direccion = 'i'; tabla[i][posicion]=cont; j=0; } } } } } for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(tabla[i][j]==1){ printf("*"); } if(tabla[i][j]==0){ printf(" "); } if(tabla[i][j]!=0 && tabla[i][j]!=1){ printf("%d",tabla[i][j]); } } printf("\n"); } } void ncaiguda (int tabla [10][10]){ for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(tabla[i][j]!=1){ tabla[i][j] = 0; } } } } void estadist (int tabla [10][10]){ }
Muchas gracias