Problem mit Rückgabewert von strcmp

22/09/2007 - 22:04 von Dennis-Bendert Schramm | Report spam
Hallo,

ich habe folgende Eingaberoutine programmiert (die Zeichenroutinen habe
ich aus Platzgründen herausgenommen):

#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX_CHARS 81

char *read_input(SDL_Surface *screen) {
SDL_Event event;
char pressed_key[MAX_CHARS];
char *_string="";
char letter=' ';
unsigned int pressed_key_count=0,i;

/* pressed_key leeren */
for(i=0;i<MAX_CHARS;i++) {
pressed_key[i]=0;
}

while(SDL_WaitEvent(&event)!=0) {
SDL_keysym keysym;
switch(event.type) {
case SDL_KEYDOWN:
keysym=event.key.keysym;
pressed_key[pressed_key_count]=keysym.sym;
++pressed_key_count;
switch(keysym.sym) {
case SDLK_ESCAPE:
exit(0);
break;
case SDLK_RETURN:
pressed_key[pressed_key_count+1]='\0';
_string=pressed_key;
return _string;
break;
default:
break;
}
break;
case SDL_QUIT:
exit(0);
}
SDL_Flip(screen);
}
}

int main() {
SDL_Surface *screen;
char *input="";
int test=0;

if(SDL_Init(SDL_INIT_VIDEO)!=0) {
printf("Kann SDL nicht initialisieren",SDL_GetError());
return 1;
}

atexit(SDL_Quit);
screen=SDL_SetVideoMode(640,480,16,0);
while(strcmp(input,"ende")!=0) {
input=read_input(screen);
printf("%s",input);
/* Debug-Code */
test=strcmp(input,"testeingabe");
printf("%i",test);
/* Debug-Code --Ende */
if(strcmp("testeingabe",input)==0) {
printf("Hier nur eine Debug-Ausgabe!");
}
}
SDL_FreeSurface(screen);
return 0;
}

Das Problem, was ich hier habe ist, dass beim strcmp in main() der
Rückgabewert _nicht_ 0 ist, was aber eigentlich der Fall sein sollte, da
beide Strings ja gleich sind. Stattdessen kommt 1 bzw. wenn man die
Strings "umdreht" -1 heraus. Wo liegt der Fehler? Möglicherweise liegt
er in der Funktion read_input?

Die ist sowieso noch nicht ganz sauber. So scheint das Programm nach dem
Start die allererste Eingabe stets zu ignorieren. Und in der
"ungekürzten" Version von read_input gibt's auch mit dem "Überschreiten"
von MAX_CHARS Ärger, aber das ist erstmal nicht so wichtig.

Danke im voraus für Lösungshinweise,

Dennis Schramm
 

Lesen sie die antworten

#1 Claudio Carobolante
23/09/2007 - 01:05 | Warnen spam
Dennis-Bendert Schramm schrieb:

ich habe folgende Eingaberoutine programmiert (die Zeichenroutinen habe
ich aus Platzgründen herausgenommen):

[Code gesnippt]

Das Problem, was ich hier habe ist, dass beim strcmp in main() der
Rückgabewert _nicht_ 0 ist, was aber eigentlich der Fall sein sollte, da
beide Strings ja gleich sind. Stattdessen kommt 1 bzw. wenn man die
Strings "umdreht" -1 heraus. Wo liegt der Fehler? Möglicherweise liegt
er in der Funktion read_input?



Naja, so wie Du formulierst, nehme ich an, Du hast das Programm nicht mit
einem Debugger getestet. Dass Deine strcmp-Funktion defekt ist, dürfte
eher unwahrscheinlich sein. Deine read_input-Funktion kann sich beenden,
ohne einen definierten Wert zurück zu geben. Selbst bei einer Rückkehr
über eine return-Anweisung ist der zurückgegebene Wert anhand des Textes
nicht erkennbar. Wie sollte Dir hier also geholfen werden können? Tu Dir
selbst einen Gefallen und teste Dein Programm mit einem Debugger.

cc

Ähnliche fragen