vektor felder sperren

kurcob

Mitglied
Hallo,

habe folgendes Problem, vielleicht kann mir jemand helfen.
Habe aus eine Textdatei ein 9x9 Feld eingelesen und möchte jetzt editieren, aber der Nutzer soll nur stände verändern können die 0 sind, wenn ich jetzt aber an der stelle schreibe wo eine 0 steht habe ich jetzt beim nächsten mal aber nicht mehr die möglichkeit dies zu verändern, wie kann ich das umgehen?
Code:
void sudedit(int *sudoku[][9]){
	int c=0,x=0,y=0;
	int i,j;
	while(1){
		while(!kbhit());
		gotoXY(x,y);

		c=getch();
		if((c!=224)&&(c!='s')&&(c!='b')&&(c!='l')&&(c!='u')&&(sudoku[y][x]==0)){
			printf("%c",c);
			sudoku[y][x]=c-'0';
		}
		if(c==224){
			switch(getch()){
				case 75: x=(--x+9)%9; break;
				case 72: y=(--y+9)%9; break;
				case 77: x=(++x+9)%9; break;
				case 80: y=(++y+9)%9; break;
			}
			gotoXY(x,y);
		}
		if(c=='l')
			system("cls");
		
		if(c=='b')
			break;
		if(c=='u'){
			ausgabe();		
			loesche();
		}
		if((c!=224)&&(c!='u'))
			anhaengen(y,x,c-'0');

	}
}
 
Hi,

Vorschlag 1:

Du machst dir ein 2tes Feld mit der selben Größe von Typ bool
und merkst dir an welchen Stellen du schreiben darfst und an welchen nicht.

..oder....

Vorschlag 2:
Du schreibst für die Zahlen die man nicht verändern darf die passenden negativen in das Feld.

Benny
 
hab das mittlerweile hinbekommen,
habe aber jetz ein anderes problem, und zwar wenn ich die benutzereingaben rückgängig machen will. hab es mit einer verketteten liste realisiert, funktioniert auch, bloß wenn ich eine zahl schreibe und sie wieder zurücknehme steht dann nicht wieder die 0 drin, weil ich mir die nicht gemerkt habe, weiß nicht wie ich da wieder die null rein bekomme
Code:
struct undo{
	int x;
	int y;
	int c;
	struct undo *next;
};

struct undo *next = NULL;
struct undo *anfang=NULL;

Code:
void ausgabe(int a,int b){
	struct undo *zeiger1=anfang, *zeiger2=anfang;
	if(anfang==NULL){
		return;
	}
	else if(anfang->next==NULL){
		gotoXY(zeiger1->y,zeiger1->x);
		printf("%d",zeiger1->c);

	}
	else{
		if(zeiger2->next != NULL){
			while(zeiger2 != NULL){
				zeiger1=zeiger1->next; 
				zeiger2=zeiger1->next;
			}
		}
		else{
			zeiger1=zeiger1->next;
		}
		gotoXY(zeiger1->y,zeiger1->x);
		printf("%d",zeiger1->c);

	}
}
 
In deiner undo struct stehen doch alle Werte die du brauchst
um einen Schritt rückgängig zu machen. Wo ist das Problem?

Was hat das rückgängig machen eigentlich mit der Ausgabe zu tun?

Tip:
Such mal nach Hilfskopfknoten, das erleichtert dir das Durchlaufen
der Liste um einiges.
Noch besser du Fuegst immer am Anfang ein, dann ist dein erstes
Element der Letzte Schritt.

Benny
 
Zurück