Rückgabe von Char in Char* aus Funkrion

FBIagent

Erfahrenes Mitglied
Hi,

ich habe mich an einer eigenen Eingabe versucht und versuche dies nun zurück zu geben
über diese funktion. (Funktion: char *input()). Ich habe es versucht mit input = malloc(pos+1);
aber dabei bekomme ich eine Fehlermeldung beim compilieren:invalid lvalue in assignment

Code:
//Header Dateien
#include <stdio.h>
#include <conio.h>
char key, str[256];
 
char *input(){
int i, loopz, pos, integ;
pos=0;
 
do{
key=getch();
for(i=65;i<91;i++){
if(key==i || key==i+32){
	str[pos]=key;
	printf("%c",str[pos]);
	pos++;
}//Buchstabenabfrage
for(loopz=48;loopz<58;loopz++){
	if(key==loopz){
	 str[pos]=key;
	 printf("%c",str[pos]);
	 pos++;
	 key=0;
	}//Zahlenabfrage
}
if(key==33 || key==34 || key==44 || key==45 || key==46 || key==58 || key==61 || key==63){
	str[pos]=key;
	printf("%c",str[pos]);
	pos++;
	key=0;
}//Satzzeichen Abfrage
if(key==13){
	break;
}//Eingbentaste Abfrage
}
}while(key!=13);
 
	input = malloc(pos+1);
input[pos] = '\0';
for(integ=0;integ=pos-1;integ++){
		input[integ] = str[integ];
	}
return input;
}//Einen String eingeben. Wenn mehr als 256 Zeichen eingegeben werden, wird der Rest abgeschnitten
 
int main(){
char *my_input;
 
my_input = input();
printf("%s",my_input);
return 0;
}//Hauptfunktion

Sorry die einrückung hat etwas beim eifügen des Codes gelitten ;)

THX im Vorraus
MFG FBIagent
 
moin


Warum willst du das per Rückgabe machen und nciht wie eigentlich üblicher über nen Parameter?


mfg
umbrasaxum
 
Wenn du einen Wert in einer Funktion zurückgeben willst, mußt du das mit return machen.
Code:
char *input( ) {
  char* x = malloc(25);
  return x;
}

Außerdem gibt's schon eine Funktion namens strdup um einen String zu kopieren.

Du könntest also das
Code:
input = malloc(pos+1);
input[pos] = '\0';
for(integ=0;integ=pos-1;integ++){
		input[integ] = str[integ];
(da ist übrigens auch noch ein Fehler drin: "integ=pos-1" ist eine Zuweisung, du willst hier vermutlich eher "integ < pos") durch das
Code:
str[pos]= 0; return strdup (str);
ersetzen.
 
Ich hab mir das nochmal genauer angekuckt. Was soll'n das werden? :)

Es scheint so, als ob du zumindest Buchstaben, Zahlen und Satzzeichen zulassen möchtest und den Rest ignorierst.

Erstmal gehst du die Sache irgendwie verkehrt an. Um für ein Zeichen zu überprüfen, ob es zum Beispiel ein Buchstabe ist reicht es zu kucken ob es im Bereich [65, 123] liegt. Da brauchst du keine Schleife, es reicht doch
Code:
if (key >= 65 && key <= 123)

Ich will dich ja nicht in deinem Tatendrang bremsen, aber es gibt übrigens auch schon Funktionen zur Überprüfung auf Buchstaben, Zahlen usw: isdigit, isalnum, isalpha und isspace.

int isalnum( int c) gibt einen Wert ungleich null zurück wenn das Zeichen c ein Buchstabe oder eine Ziffer ist.

Das heißt, wenn du prüfen möchtest ob ein Zeichen ein Buchstabe oder eine Ziffer ist:
Code:
#include <ctype.h>

if (isalnum(key)) {
   str[pos++] = key;
}
 

Neue Beiträge

Zurück