Werte mit Zeiger einlesen und ausgeben Fehler
-
Huhu Leutz,
da ich gerade ANSI C lerne , bin ich dabei mit Zeiger ein eigenes kleines Bsp zu machen um die besser zu verstehen.
Ich will die Werte einlesen über die Funktion eingabe() und später auswerten.#include <stdio.h> #include <stdlib.h> #define MAX 30 static int zahl = 0; struct werte{ char cname[MAX]; char klasse[MAX]; int staerke; int geschick; int intell; int ausdauer; int luck; int life; } werten[2]; void eingabe(struct werte werten[]) { printf("\nCharaktername:"); do {scanf("%c",&werten[zahl].cname);} while( getchar() !='\n'); printf("\nKlasse:"); do {scanf("%c",&werten[zahl].klasse);} while( getchar() !='\n'); printf("\nStaerke:"); do {scanf("%d",&werten[zahl].staerke);} while( getchar() !='\n'); printf("\nGeschick:"); do {scanf("%d",&werten[zahl].geschick);} while( getchar() !='\n'); printf("\nIntelligenz:"); do {scanf("%d",&werten[zahl].intell);} while( getchar() !='\n'); printf("\nAusdauer:"); do {scanf("%d",&werten[zahl].ausdauer);} while( getchar() !='\n'); printf("\nGlück:"); do {scanf("\n%d",&werten[zahl].luck);} while( getchar() !='\n'); fprintf(stdout,"\nBitte nur noch das Leben eingeben!"); do {scanf("\n%d",werten[zahl].life);} while( getchar() !='\n'); zahl++; } void ausgabe(struct werte *auswertung) { fprintf(stdout,"Spieler\n%c:",auswertung->cname); fprintf(stdout,"Klasse:%c\n",auswertung->klasse); fprintf(stdout,":Staerke:%c\n",auswertung->staerke); fprintf(stdout,"Geschick:%c\n",auswertung->geschick); fprintf(stdout,"Intelligenz:%c\n",auswertung->intell); fprintf(stdout,"Ausdauer:%c\n",auswertung->ausdauer); fprintf(stdout,"Glueck:%c\n",auswertung->luck); fprintf(stdout,"Lebenspunkte:%d\n",auswertung->life); } int main(void) { struct werte *eingabe1, *eingabe2; eingabe1 = eingabe(); eingabe2 = eingabe(); ausgabe(eingabe1); ausgabe(eingabe2); return EXIT_SUCCESS; }
Die GCC Fehlermeldung ist
C:\Users\******\Documents\C\game_test.c||In function `main':|
C:\Users\******\Documents\C\game_test.c|71|error: void value not ignored as it ought to be|
C:\Users\******\Documents\C\game_test.c|72|error: void value not ignored as it ought to be|
||=== Build finished: 2 errors, 0 warnings ===|Danke schonmal für die Hilfe
greetz
Demonking
Edit: Man man... xD wenn man lernt kommen einen einfach dumme Fehler ...
Kann geclosed werden lag ja aneingabe1 = eingabe(); eingabe2 = eingabe();
soll ja in
eingabe1 = eingabe; eingabe2 = eingabe;
geändert werden.
-
wtf?
-
do {scanf("%c",&werten[zahl].cname);} while( getchar() !='\n');
zahl++;
eingabe1 = eingabe; eingabe2 = eingabe;
fprintf(stdout,"Spieler\n%c:",auswertung->cname);
phew, bau dir da mal ne version wenn ich dazu komm, das kannst so nicht verwenden oder doch??
lg lolo
-
noobLolo schrieb:
phew, bau dir da mal ne version wenn ich dazu komm, das kannst so nicht verwenden oder doch??
Ich würde eher warten, bis er zumindest die richtigen Fehlermeldungen vom Compiler kopiert.
-
Habe nun den Code ausgebessert.
Hätte am liebst net Wand vor den Kopf genommen und nach vorne und hinten gewippt.#include <stdio.h> #include <stdlib.h> #define MAX 30 static int zahl = 0; struct werte{ char cname[MAX]; char klasse[MAX]; int staerke; int geschick; int intell; int ausdauer; int luck; int life; } werten[2]; void eingabe(int nr, struct werte input[]) { printf("\nCharaktername:"); fgets(input[nr].cname, MAX, stdin); printf("\nKlasse:"); fgets(input[nr].klasse, MAX, stdin); printf("\nStaerke:"); do{scanf("%4d",input[nr].staerke); }while(getchar()!= '\n'); printf("\nGeschick:"); do{scanf("%4d",input[nr].geschick); }while(getchar()!= '\n'); printf("\nIntelligenz:"); do{scanf("%4d",&input[nr].intell); }while(getchar()!= '\n'); printf("\nAusdauer:"); do{scanf("%4d",&input[nr].ausdauer); }while(getchar()!= '\n'); printf("\nGlück:"); do{scanf("%4d",&input[nr].luck); }while(getchar()!= '\n'); fprintf(stdout,"\nBitte nur noch das Leben eingeben!"); do{scanf("%4d",input[nr].life); }while(getchar()!= '\n'); } void ausgabe(struct werte auswertung[], int nr) { fprintf(stdout,"Spieler\n%c:",auswertung[nr].cname); fprintf(stdout,"Klasse:%c\n",auswertung[nr].klasse); fprintf(stdout,":Staerke:%c\n",auswertung[nr].staerke); fprintf(stdout,"Geschick:%c\n",auswertung[nr].geschick); fprintf(stdout,"Intelligenz:%c\n",auswertung[nr].intell); fprintf(stdout,"Ausdauer:%c\n",auswertung[nr].ausdauer); fprintf(stdout,"Glueck:%c\n",auswertung[nr].luck); fprintf(stdout,"Lebenspunkte:%d\n",auswertung[nr].life); } int main(void) { int x,auswahl; do { printf("-1- Werte Eingeben\n"); printf("-2- Werte Ausgeben\n"); printf("-3- Kaempfen\n"); printf("-4- Ende\n"); printf("\nIhre Auswahl : "); scanf("%d",&auswahl); getchar(); switch(auswahl) { case 1 : eingabe(zahl++,werten); do { scanf("%d",&x); } while(getchar()!= '\n'); case 2 : ausgabe(werten,x); } }while(auswahl < 3); return EXIT_SUCCESS; }
So anfängliche Fehler aber nun ja.
Bei diesem Script nun wird bis maximal Stärke abgefragt danach bricht das Programm einfach ab :s
-
ich denke du brauchst einfach mal ne erklärung zu scanf() sonst wird das nie was...
also der erste parameter für scanf() ist doch eine zeichenkette wo immer prozent gefolgt von zahlen und abschließend einem buchstaben, die restlichen parameter müssen schon dazu passen was du ihm in dem ersten angibst, also
//zahlen einlesen erwartet einen zeiger auf ein int int x; // .---so bekommst den zeiger // v scanf("%d",&x); //ausgabe dann ohne zeiger printf("%d",x); //strings einlesen erwartet einen zeiger auf ein char array also (char*) char str[1024]; // .---ohne & da str schon ein zeiger ist // v scanf("%s",str); //ausgabe benötigt einen zeiger printf("%s",x);
damit solltest dich erstmal ausgiebig beschäftigen, dann stürtzt das auch nicht immer beim einlesen und ausgeben ab...
dein eingabe puffer leeren, was bei dir so ausschaut
do{scanf("%4d",input[nr].staerke); }while(getchar()!= '\n');
machst am besten so
void clearStdin(){ //clear buffer, Eingabepuffer leeren. int c = 0; while ( c = getchar() != '\n' && c != EOF ); } ...{ scanf("%4d",&input[nr].staerke); clearStdin(); scanf("%4d",&input[nr].geschick); clearStdin(); ... }
lg lolo
-
ups z.15
printf("%s",str); statt printf("%s",x);
ja ich war noch nicht ganz wach
-
@Nooblolo : Danke dir für die gute Erklärung
und es klappt nun auch, werde mir wohl nun immer ne Funktion zum
Puffer leeren erstellen und deine Erklärung beherzigen