HILFE beim Telefonverzeichnis
-
noch ne Frage:
In Unterfunktion 3 (ausgabe)des Programms benutze ich
printf ("\n\n\n");
printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
while(getch()!='h')Warum muß ich ´h´ zweimal drücken bis der Rüchsprung erfolgt??
-
in deinem programm steckt an mehreren stellen der wurm:
fscanf(zeiger,"%i","&i"); //liest Anzahl der Datensätze
du hast den letzten parameter versehentlich in anführungszeichen gesetzt.
bei der variablen i machst du auch einen fehler. wenn du i zum programmstart auf 1 setzt und zu beginn von eingabe() i inkrementierst, dann wird der erste datensatz imm array an der indexposition 2 geschrieben anstatt an der stelle 0. du mußt i zum programmstart auf null setzten und in der funktion eingabe() i am ende inkrementieren. in anderen worten: i sollte die anzahl der im array gespeicherten datensätze enthalten. bei den for-schleifen mußt du dann aber
for (x=0; x<i; x=x+1)
anstelle von
for (x=0; x=<i; x=x+1)
schreiben.
in der funktion suchen() hast du dich total verhaspelt
da hast du das
if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
außerhalb statt innerhalb der for-schleife stehen!
zu der frage, warum 'h' zweimal eingegeben werden muß: du hast hinter while(getch()!='h'); noch ein getch() stehen. wenn du das entfernst, dann sollte es funktionieren.
-
Ja - vielen vielen Dank für die hilfreichen Tipps. Habe die Fehler korregiert und bin dadurch ein kleines Stück weiter gekommen. Leider funzt die Ausgabe der Datensätze immer noch nicht. Selbst unter berücksichtigung des NULL-Bytes bei der Ausgabe. Nun stoppt das Prog. mit "access violation at 0x4017af...
Die .txt Datei wird nach wie vor nicht richtig gespeichert.
Ich weiß - es nervt, aber für Rat und Tat werde ich ewig dankbar sein!!!
Hier nochmal der Code:#include <stdio.h>
#include <conio.h> //laden von Bibliotheken die benötigt werden
#include <stdlib.h>
#include <string.h>struct daten // Datenstruktur festlegen
{
char name[20];
char vorname[15]; //zu strukturierende Daten...
char email[30]; //...mit fest vorgeschriebener Zeichenanzahl
int nummer;
char stichwort[31];
} liste[100]; //legt 100 Datensätze mit Namen "Liste" maximalint i=0,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 1 und...
//..einer Var. x ohne Wertvoid menue();
void eingabe(); //anmelden aller Unterfunktionen des Progamms
void ausgabe();
void suchen();
void beenden();void main() //Hauptfunktion
{
int x;
FILE *zeiger;
zeiger=fopen("a:\liste.txt","r"); //öffnen der Datensätze zum lesen
if (zeiger != NULL)
{
if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht{
fscanf(zeiger,"%i",&i); //liest Anzahl der Datensätze
for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind)
//1.Bed.:Var x=0 xgrößergleich i UND...
//2.Bed.:Zeiger am Ende der Datei
{
fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll
fscanf (zeiger,"%s",&liste[x].vorname);
fscanf (zeiger,"%i",&liste[x].nummer);
fscanf (zeiger,"%s",&liste[x].email);
}}
fclose(zeiger);
}for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife
menue();
}void menue() //1.Unterfunktion
{
clrscr();
gotoxy(1,5);
printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
printf (" X X\n");
printf (" X Online-Telefonverzeichnis X\n");
printf (" X----------------------------------------X\n");
printf (" X X\n");
printf (" X Bitte waehlen Sie: X\n");
printf (" X ----------------------- X\n");
printf (" X X\n");
printf (" X 1 Teilnehmer eingeben X\n");
printf (" X X\n");
printf (" X 2 Teilnehmer ausgeben X\n");
printf (" X X\n");
printf (" X 3 Teilnehmer suchen X\n");
printf (" X X\n");
printf (" X 4 Programm beenden X\n");
printf (" X X\n");
printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");char a;
a = getch();
switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl
{case '1' : eingabe(); break; // case block:
case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen
case '3' : suchen(); break; //break Anweisung beendet einen case Block
case '4' : beenden(); break; //
default : menue(); // wenn alle case Blöcke nicht zutreffen...
//...RÜcksprung ins Hauptmenue}
}
void eingabe() //2.Unterfunktion
{
do //führe aus
{
clrscr();
gotoxy(1,3);
printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
printf (" X X\n");
printf (" X Bitte geben Sie Ihre Daten ein X\n");
printf (" X----------------------------------------X\n");
printf (" X X\n");
printf (" X Name : X\n");
printf (" X X\n");
printf (" X Vorname: X\n");
printf (" X X\n");
printf (" X Nummer : X\n");
printf (" X X\n");
printf (" X Email : X\n");
printf (" X X\n");
printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");gotoxy(26,8);
scanf("%s",liste[i].name);while(strlen(liste[i].name)>20) //liefert die Anzahl der Buchstaben der Zeichenkette name zurück
{gotoxy(0,23);
printf ("!!!Bitte nicht mehr als 20 Zeichen eingeben!!!\n");
printf ("!!!Bitte Eingabe wiederholen \n");gotoxy(26,8);
scanf("%s",liste[i].name);
}
i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1gotoxy(26,10);
scanf("%s",liste[i].vorname);while(strlen(liste[i].vorname)>15) //liefert die Anzahl der Buchstaben der Zeichenkette vorname zurück
{gotoxy(0,23);
printf ("!!!Bitte nicht mehr als 15 Zeichen eingeben!!!\n");
printf ("!!!Bitte Eingabe wiederholen \n");
printf ("\t\t\t \n");
gotoxy(26,10);
scanf("%s",liste[i].vorname);
}gotoxy(26,12);
scanf("%i",&liste[i].nummer);while(liste[i].nummer>9999)
{gotoxy(0,23);
printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n");
printf ("!!!Bitte Eingabe wiederholen \n");
printf ("\t\t\t \n");
gotoxy(26,12);
scanf("%i",liste[i].nummer);
}gotoxy(26,14);
scanf("%s",liste[i].email);while(strlen(liste[i].email)>30) //strlen liefert die Anzahl der Buchstaben der Zeichenkette email zurück
{ //wenn Anzahl höher als vordefiniert dann erneute Eingabegotoxy(0,23);
printf ("!!!Bitte nicht mehr als 30 Zeichen eingeben!!!\n");
printf ("!!!Bitte Eingabe wiederholen \n");
printf ("\t\t\t \n");
gotoxy(26,17);
scanf("%s",liste[i].name);
}gotoxy(0,23);
printf ("\t\t \n");
printf (" \n");gotoxy(0,23);
printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n");
}while(getch()=='j'); //wenn ja - erneute Eingabe
FILE *zeiger;
zeiger=fopen("a:\liste.txt","w"); //öffnen der Datensätze zum schreiben
if (zeiger != NULL)
{fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste"
for (x=0; x<i; x=x+1){
fprintf (zeiger,"%s",&liste[x].name);
fprintf (zeiger,"%s",&liste[x].vorname);
fprintf (zeiger,"%i",&liste[x].nummer);
fprintf (zeiger,"%s",&liste[x].email);
}
fclose(zeiger);}
else
{
printf ("Programm konnte Ihre Daten nicht speichern...");
getch();
}
printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n");
printf ("\n\n\Druecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n");
getch();
}void ausgabe() //3.Unterprogramm
{
int n;
clrscr();
printf (" Telefonliste: \n");
printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
printf (" Name Vorname Nummer Email \n");
for(x=0; x<i; x=x+1)
{
printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);}
printf ("\n\n\n");
printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird
printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");}
void suchen()
{
char stichwort[31];
clrscr();
gotoxy(16,12);
printf ("\n\t\t Namen suchen\n");
printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n");
gotoxy(35,17);
scanf("%s",stichwort);char b,n;
{
{
clrscr();
printf (" Suchergebnis: \n");
printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
printf (" Name Vorname Nummer Email \n");
for(x=0; x<i; x=x+1);
if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
{printf (" %s %s %d %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
b++; //Eingegebener Datensatz wird um 1 erhöht
}
}
}if (b==0)
{
printf ("\nTeilnehmer nicht vorhanden!\n");
printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
getch();
}
else
{
printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
getch();
}}
void beenden()
{
clrscr();
gotoxy(16,12);
printf ("\t\tSie haben das Programm beendet.\a\n");
gotoxy(16,14);
printf ("\t\t (beliebige Taste druecken)\n");
getch();
exit(0);
}
-
Also:
das Speichern kann nicht richtig funktionieren, da du die Adressen in die Datei schreibst
fprintf (zeiger,"%s",&liste[x].name); fprintf (zeiger,"%s",&liste[x].vorname); fprintf (zeiger,"%i",&liste[x].nummer); fprintf (zeiger,"%s",&liste[x].email);
-
Wenn du das Prog startest und "Ausgabe" wählst, kann es nicht funktionieren, weil keine Daten da sind. Müsstest Sie vorher schon einlesen.
habe dir jetzt mal die Einlesefunktion berichtigt. Versuche es mal weiterzumachen.
#include <stdio.h> #include <conio.h> //laden von Bibliotheken die benötigt werden #include <stdlib.h> #include <string.h> struct daten // Datenstruktur festlegen { char name[20]; char vorname[15]; //zu strukturierende Daten... char email[30]; //...mit fest vorgeschriebener Zeichenanzahl int nummer; char stichwort[31]; } liste[100]; //legt 100 Datensätze mit Namen "Liste" maximal int i=0,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 1 und... //..einer Var. x ohne Wert char szFile[] = "D:\\Liste.txt"; void menue(); void eingabe(); //anmelden aller Unterfunktionen des Progamms void ausgabe(); void suchen(); void beenden(); void main() //Hauptfunktion { int x; FILE *zeiger; zeiger=fopen(szFile,"r"); //öffnen der Datensätze zum lesen if (zeiger != NULL) { if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht { fscanf(zeiger,"%i",&i); //liest Anzahl der Datensätze for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind) //1.Bed.:Var x=0 xgrößergleich i UND... //2.Bed.:Zeiger am Ende der Datei { fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll fscanf (zeiger,"%s",&liste[x].vorname); fscanf (zeiger,"%i",&liste[x].nummer); fscanf (zeiger,"%s",&liste[x].email); } } fclose(zeiger); } for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife menue(); } void menue() //1.Unterfunktion { system("cls"); //gotoxy(1,5); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" X X\n"); printf (" X Online-Telefonverzeichnis X\n"); printf (" X----------------------------------------X\n"); printf (" X X\n"); printf (" X Bitte waehlen Sie: X\n"); printf (" X ----------------------- X\n"); printf (" X X\n"); printf (" X 1 Teilnehmer eingeben X\n"); printf (" X X\n"); printf (" X 2 Teilnehmer ausgeben X\n"); printf (" X X\n"); printf (" X 3 Teilnehmer suchen X\n"); printf (" X X\n"); printf (" X 4 Programm beenden X\n"); printf (" X X\n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); char a; a = getch(); switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl { case '1' : eingabe(); break; // case block: case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen case '3' : suchen(); break; //break Anweisung beendet einen case Block case '4' : beenden(); break; // default : menue(); // wenn alle case Blöcke nicht zutreffen... //...RÜcksprung ins Hauptmenue } } void eingabe() //2.Unterfunktion { do //führe aus { system("cls"); //gotoxy(1,3); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" X X\n"); printf (" X Bitte geben Sie Ihre Daten ein X\n"); printf (" X----------------------------------------X\n"); printf (" X X\n"); printf (" X Name : "); // Namen einlesen fgets(liste[i].name, 20, stdin); // es werden maximal 20 Zeichen gelesen printf (" X X\n"); printf (" X Vorname: "); fgets(liste[i].vorname, 15, stdin); // es werden maximal 15 Zeichen gelesen printf (" X X\n"); printf (" X Nummer : "); scanf("%i", &liste[i].nummer); while(liste[i].nummer>9999) { //gotoxy(0,23); printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n"); printf ("!!!Bitte Eingabe wiederholen \n"); printf ("\t\t\t \n"); //gotoxy(26,12); scanf("%i", &liste[i].nummer); } printf (" X X\n"); printf (" X Email : "); fflush(stdin); fgets(liste[i].email, 30, stdin); // liest max. 30 Zeichen printf (" X X\n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); //gotoxy(26,8); i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1 //gotoxy(0,23); printf ("\t\t \n"); printf (" \n"); //gotoxy(0,23); printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n"); } while(getch()=='j'); //wenn ja - erneute Eingabe FILE *zeiger; zeiger=fopen(szFile,"w"); //öffnen der Datensätze zum schreiben if (zeiger != NULL) { fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste" for (x=0; x<i; x=x+1) { fprintf (zeiger,"%s", liste[x].name); fprintf (zeiger,"%s", liste[x].vorname); fprintf (zeiger,"%i\n", liste[x].nummer); fprintf (zeiger,"%s", liste[x].email); } fclose(zeiger); } else { printf ("Programm konnte Ihre Daten nicht speichern..."); getch(); } printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n"); printf ("\n\n\tDruecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n"); getch(); } void ausgabe() //3.Unterprogramm { int n; system("cls"); printf (" Telefonliste: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(x=0; x<i; x=x+1) { printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); } printf ("\n\n\n"); printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n"); while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n"); } void suchen() { char stichwort[31]; system("cls"); //gotoxy(16,12); printf ("\n\t\t Namen suchen\n"); printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n"); //gotoxy(35,17); scanf("%s",stichwort); char b,n; { { system("cls"); printf (" Suchergebnis: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(x=0; x<i; x=x+1); if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen { printf (" %s %s %d %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); b++; //Eingegebener Datensatz wird um 1 erhöht } } } if (b==0) { printf ("\nTeilnehmer nicht vorhanden!\n"); printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } else { printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } } void beenden() { system("cls"); //gotoxy(16,12); printf ("\t\tSie haben das Programm beendet.\a\n"); //gotoxy(16,14); printf ("\t\t (beliebige Taste druecken)\n"); getch(); exit(0); }
-
Hoch verehrtes C Forum
Nun denn - nach langer Krankheit und dem üblichen Weihnachtshallas sitze ich nun wieder an meinem geliebten Telefonverzeichnis!
Dank Horst2, Konfusius & Co. habe ich meine Fehler korrigiert und das Programm läuft schon recht ordentlich.
Als da wären noch ein paar Fragen zum Feintuning:
1. I.d. Eingabefunkt. darf eine gewisse Zeichenanzahl nicht überschritten werden.
In meiner alten Version des Programmes hat dies auch gefuntzt.Durch den Austauch von scanf durch fgets geht diese Option verloren.WHY??
2. In der Suchfunkt. habe ichif (strcmp(liste[n].name,stichwort) == 0)
in die for - Schleife gelegt.
Es werden trotzdem keine Ergebnisse ausgespuckt, obwohl übereinstimmende Stichworte benutzt wurden
Für schnelle Hilfe wäre ich unendlich dankbar, da ich am Donnerstag den Rotz präsentieren muß!!
Das mit dem"convert coffein into code" klappt bei mir irgendwie nich!!!
Vielen vielen Dank!!!!Hier nochmal der code:
#include <stdio.h> #include <conio.h> //laden von Bibliotheken die benötigt werden #include <stdlib.h> #include <string.h> struct daten // Datenstruktur festlegen { char name[20]; char vorname[15]; //zu strukturierende Daten... char email[30]; //...mit fest vorgeschriebener Zeichenanzahl int nummer; char stichwort[31]; } liste[100]; //legt 100 Datensätze mit Namen "Liste" maximal int i=0,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 0 und... //..einer Var. x ohne Wert char szFile[] = "A:\\Liste.txt"; void menue(); void eingabe(); //anmelden aller Unterfunktionen des Progamms void ausgabe(); void suchen(); void beenden(); void main() //Hauptfunktion { int x; FILE *zeiger; zeiger=fopen(szFile,"r"); //öffnen der Datensätze zum lesen if (zeiger != NULL) { if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht { fscanf(zeiger,"%i",&i); //liest Anzahl der Datensätze for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind) //1.Bed.:Var x=0 xgrößergleich i UND... //2.Bed.:Zeiger am Ende der Datei { fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll fscanf (zeiger,"%s",&liste[x].vorname); fscanf (zeiger,"%i",&liste[x].nummer); fscanf (zeiger,"%s",&liste[x].email); } } fclose(zeiger); } for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife menue(); } void menue() //1.Unterfunktion { clrscr(); gotoxy(1,5); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" X X\n"); printf (" X Online-Telefonverzeichnis X\n"); printf (" X----------------------------------------X\n"); printf (" X X\n"); printf (" X Bitte waehlen Sie: X\n"); printf (" X ----------------------- X\n"); printf (" X X\n"); printf (" X 1 Teilnehmer eingeben X\n"); printf (" X X\n"); printf (" X 2 Teilnehmer ausgeben X\n"); printf (" X X\n"); printf (" X 3 Teilnehmer suchen X\n"); printf (" X X\n"); printf (" X 4 Programm beenden X\n"); printf (" X X\n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); char a; a = getch(); switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl { case '1' : eingabe(); break; // case block: case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen case '3' : suchen(); break; //break Anweisung beendet einen case Block case '4' : beenden(); break; // default : menue(); // wenn alle case Blöcke nicht zutreffen... //...RÜcksprung ins Hauptmenue } } void eingabe() //2.Unterfunktion { do //führe aus { system("cls"); //gotoxy(1,3); printf (" Bitte geben Sie Ihre Daten ein \n"); printf (" ----------------------------------------------\n"); printf (" \n"); printf (" Name : "); // Namen einlesen fgets(liste[i].name, 20, stdin); // es werden maximal 20 Zeichen gelesen printf ("\n"); printf (" Vorname : "); fgets(liste[i].vorname, 15, stdin); // es werden maximal 15 Zeichen gelesen printf (" \n"); printf (" Nummer : "); scanf("%i", &liste[i].nummer); while(liste[i].nummer>9999) { //gotoxy(0,23); printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n"); printf ("!!!Bitte Eingabe wiederholen \n"); printf ("\t\t\t \n"); //gotoxy(26,12); scanf("%i", &liste[i].nummer); } printf (" \n"); printf (" Email : "); fflush(stdin); fgets(liste[i].email, 30, stdin); // liest max. 30 Zeichen printf (" \n"); //gotoxy(26,8); i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1 //gotoxy(0,23); printf ("\t\t \n"); printf (" \n"); //gotoxy(0,23); printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n"); } while(getch()=='j'); //wenn ja - erneute Eingabe FILE *zeiger; zeiger=fopen(szFile,"w"); //öffnen der Datensätze zum schreiben if (zeiger != NULL) { fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste" //\n an dieser Stelle bewirkt, dass im ARRAY //ein Zeilenumbruch stattfindet for (x=0; x<i; x=x+1) { fprintf (zeiger,"%s", liste[x].name); fprintf (zeiger,"%s", liste[x].vorname); fprintf (zeiger,"%i\n", liste[x].nummer); fprintf (zeiger,"%s", liste[x].email); } fclose(zeiger); } else { printf ("Programm konnte Ihre Daten nicht speichern..."); getch(); } printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n"); printf ("\n\n\tDruecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n"); getch(); } void ausgabe() //3.Unterprogramm { int n; clrscr(); printf (" Telefonliste: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(n=0;n<i;n=n+1) { printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); } printf ("\n\n\n"); printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n"); while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n"); } void suchen() { char stichwort[31]; clrscr(); gotoxy(16,12); printf ("\n\t\t Namen suchen\n"); printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n"); gotoxy(35,17); scanf("%s",stichwort); char b,n; clrscr(); printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n"); printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf("%s",liste[n].name); printf("%s",liste[n].stichwort); { clrscr(); printf (" Suchergebnis: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(n=0;n<i;n=n+1); { if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); b++; //Eingegebener Datensatz wird um 1 erhöht } } if (b==0) { printf ("\nTeilnehmer nicht vorhanden!\n"); printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } else { printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } } void beenden() { clrscr(); gotoxy(16,12); printf ("\t\tSie haben das Programm beendet.\a\n"); gotoxy(16,14); printf ("\t\t (beliebige Taste druecken)\n"); getch(); exit(0); }
-
bleibe bitte in diesem thread und mache keinen neuen auf. danke.
-
c.rackwitz schrieb:
bleibe bitte in diesem thread und mache keinen neuen auf. danke.
nun - was auch immer thread an dieser Stelle bedeuten mag...Ich denke es ist unschwer zu erkennen, dass ich nicht die allwissende Programmierschlampe bin und mir mit solchen statements in keinster Weise geholfen ist.
Trotzdem vielen lieben Dank...
-
thread heisst diskussionsfaden. ich wuerde es sehr schaetzen, wenn du nicht 3 verschiedene threads mit dem gleichen titel und dem gleichen problem eroeffnen wuerdest.
tust du mir bitte den gefallen?
-
Well - nun da ich das mit dem Thread begriffen habe und die Ausgabefunkt. meines Programmes läuft nun nochmal eine Frage zu meiner Suchfunkt.:
void suchen() { char stichwort[31]; clrscr(); gotoxy(16,12); printf ("\n\t\t Namen suchen\n"); printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n"); gotoxy(35,17); scanf("%s",stichwort); char b,n; clrscr(); printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n"); printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf("%s",liste[n].name); printf("%s",liste[n].stichwort); { clrscr(); printf (" Suchergebnis: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(n=0;n<i;n=n+1); if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen { if (b==0) printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); } b++; } else printf ("\nTeilnehmer nicht vorhanden!\n"); printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); { printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } }
In meinem C Tutorial steht, dass bei verschachtelten if Anweisungen die 2. Bedingung vor die 1. Anweisung gesetzt werden muss.
Dies habe ich auch getan, jedoch sagt der Compiler mir dann, dass ich else an eine falsche Position gesetzt habe.WARUM???
-
stepop schrieb:
In meinem C Tutorial steht, dass bei verschachtelten if Anweisungen die 2. Bedingung vor die 1. Anweisung gesetzt werden muss.
Dies habe ich auch getan, jedoch sagt der Compiler mir dann, dass ich else an eine falsche Position gesetzt habe.WARUM???deine einrueckung laesst zu wuenschen uebrig. ruecke ordentlich ein, dann siehst du, was der compiler fuer probleme hat.
mach das bitte, denn so lernst du mehr als wenn du dir deinen code von anderen schreiben laesst.
-
c.rackwitz schrieb:
stepop schrieb:
In meinem C Tutorial steht, dass bei verschachtelten if Anweisungen die 2. Bedingung vor die 1. Anweisung gesetzt werden muss.
Dies habe ich auch getan, jedoch sagt der Compiler mir dann, dass ich else an eine falsche Position gesetzt habe.WARUM???deine einrueckung laesst zu wuenschen uebrig. ruecke ordentlich ein, dann siehst du, was der compiler fuer probleme hat.
mach das bitte, denn so lernst du mehr als wenn du dir deinen code von anderen schreiben laesst.
Geschätzter Moderator!
Hier geht es nicht darum mich auf misslungene Klammersetzung aufmerksam zu machen, denn wenn diese richtig positioniert sind laeuft die Funktion ebenfalls nicht(ist ja bestimmt aufgefallen!).
Ferner liegt mir auch sehr wenig daran mir irgenwas vorkauen zu lassen. Wenn man den THREAD aufmerksam verfolgt laesst sich feststellen, dass ich binnen kurzer Zeit zu einer Loesung kommen muss. Da ich kein Programmierer bin und es auch nie sein werde ist hier ein nuetzlicher Tipp zu Vollendung des Gesamten wesentlich sinnvoller als goldene Zeit mit Korrinten kacken zu verplempern.
Vielen Dank für Ihre Anteilnahme
-
stepop schrieb:
... wesentlich sinnvoller als goldene Zeit mit Korrinten kacken zu verplempern.
Vielen Dank für Ihre AnteilnahmeEs heisst Korinthen.
-
na na na, du willst hilfe, nicht ich. ein bisschen demut waere nicht verkehrt...
wenn ich wuesste, was in deine if und else zweige gehoeren soll, koennte ich dir den code einfach hinwerfen.
das weiss ich aber nicht, also kann ich dir nur allgemein raten, dies und das zu tun.
und weil ich so lieb bin, ruecke ich dir deinen code jetzt mal ein und setze ein paar klammern, damit du sehen kannst, wo der fehler sein koennte:void suchen() { char stichwort[31]; clrscr(); gotoxy(16,12); printf ("\n\t\t Namen suchen\n"); printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n"); gotoxy(35,17); scanf("%s",stichwort); char b,n; clrscr(); printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n"); printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf("%s",liste[n].name); printf("%s",liste[n].stichwort); { // sinnloser block clrscr(); printf (" Suchergebnis: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(n=0;n<i;n=n+1); // dieser loop hat keinen koerper if (strcmp(liste[n].name,stichwort) == 0) { if (b==0) // diese beiden ifs kann man zusammenfassen { printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); } } b++; } else { printf ("\nTeilnehmer nicht vorhanden!\n"); } printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); {// sinnloser block printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } }
sonst noch wuensche? du darfst mich ruhig wie einen fussabtreter behandeln. ich werd schliesslich koeniglich bezahlt, hier rund um die uhr innerhalb von maximal 5 minuten jeden post zu beantworten.
-
Gut - reicher Mann - grosse Ehrfurcht!
Hier die kompl.version bei der in der Suchfunktion kein Klammerfehler mehr sitzt.
Zur Beschreibung:Das Prog. soll Teinehmer einlesen(laeuft), ausgeben(laeuft) und suchen koennen(laeuft nicht)
Wenn du das Ding laufen lässt und unter 1 Teilnehmer eingegeben hast, wirst du feststellen, dass trotz vorhandenem Teilnehmer die Suchfunkt. sagt: "Teilnehmer nicht vorhanden".WHY???#include <stdio.h> #include <conio.h> //laden von Bibliotheken die benötigt werden #include <stdlib.h> #include <string.h> struct daten // Datenstruktur festlegen { char name[20]; char vorname[15]; //zu strukturierende Daten... char email[30]; //...mit fest vorgeschriebener Zeichenanzahl int nummer; char stichwort[31]; } liste[100]; //legt 100 Datensätze mit Namen "Liste" maximal int i=0,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 0 und... //..einer Var. x ohne Wert char szFile[] = "A:\\Liste.txt"; void menue(); void eingabe(); //anmelden aller Unterfunktionen des Progamms void ausgabe(); void suchen(); void beenden(); void main() //Hauptfunktion { int x; FILE *zeiger; zeiger=fopen(szFile,"r"); //öffnen der Datensätze zum lesen if (zeiger != NULL) { if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht { fscanf(zeiger,"%i",&i); //liest Anzahl der Datensätze for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind) //1.Bed.:Var x=0 xgrößergleich i UND... //2.Bed.:Zeiger am Ende der Datei { fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll fscanf (zeiger,"%s",&liste[x].vorname); fscanf (zeiger,"%i",&liste[x].nummer); fscanf (zeiger,"%s",&liste[x].email); } } fclose(zeiger); } for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife menue(); } void menue() //1.Unterfunktion { system("cls"); gotoxy(1,5); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" X X\n"); printf (" X Online-Telefonverzeichnis X\n"); printf (" X----------------------------------------X\n"); printf (" X X\n"); printf (" X Bitte waehlen Sie: X\n"); printf (" X ----------------------- X\n"); printf (" X X\n"); printf (" X 1 Teilnehmer eingeben X\n"); printf (" X X\n"); printf (" X 2 Teilnehmer ausgeben X\n"); printf (" X X\n"); printf (" X 3 Teilnehmer suchen X\n"); printf (" X X\n"); printf (" X 4 Programm beenden X\n"); printf (" X X\n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); char a; a = getch(); switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl { case '1' : eingabe(); break; // case block: case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen case '3' : suchen(); break; //break Anweisung beendet einen case Block case '4' : beenden(); break; // //default : menue(); // wenn alle case Blöcke nicht zutreffen... //...RÜcksprung ins Hauptmenue } } void eingabe() //2.Unterfunktion { do //führe aus { system("cls"); //gotoxy(1,3); printf (" Bitte geben Sie Ihre Daten ein \n"); printf (" ----------------------------------------------\n"); printf (" \n"); printf (" Name : "); // Namen einlesen fgets(liste[i].name, 20, stdin); // es werden maximal 20 Zeichen gelesen printf ("\n"); printf (" Vorname : "); fgets(liste[i].vorname, 15, stdin); // es werden maximal 15 Zeichen gelesen printf (" \n"); printf (" Nummer : "); scanf("%i", &liste[i].nummer); while(liste[i].nummer>9999) { //gotoxy(0,23); printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n"); printf ("!!!Bitte Eingabe wiederholen \n"); printf ("\t\t\t \n"); //gotoxy(26,12); scanf("%i", &liste[i].nummer); } printf (" \n"); printf (" Email : "); fflush(stdin); fgets(liste[i].email, 30, stdin); // liest max. 30 Zeichen printf (" \n"); //gotoxy(26,8); i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1 //gotoxy(0,23); printf ("\t\t \n"); printf (" \n"); //gotoxy(0,23); printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n"); } while(getch()=='j'); //wenn ja - erneute Eingabe FILE *zeiger; zeiger=fopen(szFile,"w"); //öffnen der Datensätze zum schreiben if (zeiger != NULL) { fprintf(zeiger,"%i",i); //schreibt die Anzahl der Datensätze in die "Liste" //\n an dieser Stelle bewirkt, dass im ARRAY //ein Zeilenumbruch stattfindet for (x=0; x<i; x=x+1) { fprintf (zeiger,"%s\n", liste[x].name); fprintf (zeiger,"%s\n", liste[x].vorname); fprintf (zeiger,"%i\n", liste[x].nummer); fprintf (zeiger,"%s\n", liste[x].email); } fclose(zeiger); } else { printf ("Programm konnte Ihre Daten nicht speichern..."); getch(); } printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n"); printf ("\n\n\tDruecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n"); getch(); } void ausgabe() //3.Unterprogramm { int n; system("cls"); printf (" Telefonliste: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(n=0;n<i;n=n+1) { printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); } printf ("\n\n\n"); printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n"); while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n"); } void suchen() { char stichwort[31]; system("cls"); gotoxy(16,12); printf ("\n\t\t Namen suchen\n"); printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n"); gotoxy(35,17); scanf("%s",stichwort); char b=0,n=0; system("cls"); { printf (" Suchergebnis: \n"); printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); printf (" Name Vorname Nummer Email \n"); for(n=0;n<i;n=n+1); if (strcmp(liste[i].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen { if (b==0); printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email); b++; } else printf ("\nTeilnehmer nicht vorhanden!\n"); printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n"); getch(); } void beenden() { system("cls"); gotoxy(16,12); printf ("\t\tSie haben das Programm beendet.\a\n"); gotoxy(16,14); printf ("\t\t (beliebige Taste druecken)\n"); getch(); exit(0); }
Vielen Dank
-
Wie wäre es, wenn du das was c.rackwitz netterweise für dich vorkaut nicht ignorierst?
-
den naechsten code, den ich hier gleich vorkotze, werde ich dermassen schleifen, dass der lehrer einfach erkennen MUSS, dass sowas kein schueler schreiben kann... dann bleibt dir nichts anderes uebrig, als DEIN HIRN ZU BENUTZEN, wie es ja von jedem schueler verlangt wird, der eine seinen leistungen entsprechende note haben will. dein pech, wenn du nichts im leben erreichen willst, aber mach dann bitte niemand anderen als DICH verantwortlich.
-
kommt da noch was?
-
naja, von mir erstmal nicht. mir ists vergangen.
hab jetzt eine weile mit indent [1] gespielt, weil der code vom OP wirklich nicht mehr per hand zu zaehmen ist.
habe jetzt mein flagset fuer indent und fuer die zukunft gibts schnellere antwortzeiten
-
Oh je weiser reicher Mann. Wer hinter nem zu großen Monitor sitzt bemerkt wahrscheinlich nicht, dass draussen die Sonne scheint und ist mittlerweile so zienlich verranzt durch seine ganzen Berufsschullehrer Sprüche die er tagläglich an seine Schäfchen abgibt.
Wohl an junger Mann. Sieh zu dass du als Operator die nächsten zehn Jahre weiterhin so königlich bezahlt wirst für den Scheiß den du jeden Tag ablässt.
Schööler Pfeiffer