Problem mit getch()
-
ich habe bei folgenden teil ein problem
char datenbankname_alt[50]; // Globale Variable bool alte_datenbank_oeffnen() { FILE * datei; //Dateipointer für die geöffnete Datei bool ok = true; //Boolean wert, der angibt ob eine datei erstellt wurde oder nicht int length; //Länge des eingegebenen Strings bestimmen char modus[] = "rb"; //modus zum öffnen der Datei festlegen char auswahl; printf("\n Bitte geben Sie Datenbank namen ein, wie folg ein:\n\n" " datenbankname\n\n" " Eine andere eingabe koennte zu Problemen bei der\n" " Erstellung/Oeffnen der Datenbank fuehren.\n" " Der Dateiname darf maximal 46 Zeichen lang sein.\n" " Dateiname: "); fflush(stdin); //Standard input löschen rw = scanf("%46s", &datenbankname_alt); //Eingabe des Benutzers einlesen length = (int)strlen(datenbankname_alt); //Länge der Eingabe festlegen strncat(datenbankname_alt, EXTENSION, length+1); //An die Eingabe .dbf anhängen datei = datei_oeffnen(datenbankname_alt,modus);//Datei öffnen in einem Bestimmmten modus if(!datei) //ist die datei geöffnet worden { printf("\n Die angegebenen Datei: %s konnte nicht gefunden werden\n" " Entweder haben Sie den Namen falsch geschrieben oder \n" " diese Datei existiert nicht.\n" , datenbankname_alt); printf("\nWollen Sie die Datei jetzt erstellen? (J)a oder (N)ein?: "); fflush(stdin); auswahl = toupper(getch()); while(auswahl != 'J' || auswahl != 'N') { printf("\nFalsche Auswahl!!" "\nWollen Sie die Datei jetzt erstellen? (J)a oder (N)ein?: "); fflush(stdin); auswahl = toupper(getch()); } if(auswahl == 'J') { datei = datei_erstellen(datenbankname_alt);//Datei erstellen ok = true; } else { ok = false; } } fclose(datei); return ok; } FILE *datei_oeffnen(char datenbankname[],char modus[]) { return fopen(datenbankname, modus); //öffnent eine Datei im "modus" }
Jedesmal wenn ich eine datei öffne die nicht vorhanden ist soll er sie neu erstellen, ich komme aber niemals aus der abfrage hinaus, und ich weiß nicht warum, außerdem gibt er mir eine fehler für die Variable auswahl an, das sie außerhalb verändert wurde aber ich ändere sie nicht, und das getch() funktioniert auch nicht richtig,
hat vielleicht einer eine idee ????
-
aus welcher Abfrage kommst Du nicht raus? Vielleicht aus Deiner while-Schleife?
Wenn das der Fall ist, dann würde ich mal versuchen (meine Meinung nur beim ersten Überfliegen) das so zu schreiben:
while (auswahl != 'J' && auswahl != 'N')
Mal Dir mal eine Tabelle auf mit oder-werten, wenn nur eine Bedingung wahr ist, dann kannst Du die Schleife nicht verlassen. Wenn Du also 'J' eintippst, dann ist
auswahl !='N'
erfüllt. Und die Schleife wird nochmals durchlaufen.Wenn ich jetzt aber auf dem Holzweg bin, dann berichtigt mich bitte!
VG, larsen
-
das könnte durch aus möglich sein dass es daran liegt werde diese tun.
jedoch bekomme ich immer noch eine fehler meldung wenn ich das mit getch() mache, und zwar das die variable "auswahl" verändert worden ist, obwohl ich sie kein einziges mal wirklich veränder, abgesehen von den eingaben.
das ganze habe ich im .net programmiert, wenn das ne hilfe ist
-
Eigentlich müsste das funktionieren. Welche Fehlermeldung bekommst du denn genau?
-
also larsen hat eindeutig recht. so kommst du aus der schleife nicht raus.
Tip: gewöhn dir mal ungarische notation an, d.h. das man am Variablennamen schon erkennen kann um welchen typ es sich handelt. dann lässt sich der code viel leichter lesen
-
Horst2 schrieb:
also larsen hat eindeutig recht. so kommst du aus der schleife nicht raus.
Tip: gewöhn dir mal ungarische notation an, d.h. das man am Variablennamen schon erkennen kann um welchen typ es sich handelt. dann lässt sich der code viel leichter lesen
hatte bis jetzt noch keine probleme damit
Die fehler meldung die ich bekomm lautet:
Run-Time error #2 variable 'auswahl' has been change
wenn ich auf die fehler meldung klicke, springt er zum ende der funkion, und meint das der Fehler um der variable 'auswahl' liegt ?????
-
so hab das problem jetzt beseitigt
es war der logische operator beim while, danke für die hilfe
der zweite fehler hat sich auch irgendwie erledigt
mfg