char einlesen, innerhalb einer fkt
-
hallo leute,
folgendes problem: Aufgabenstellung ist es, eine beliebig langen text über stdin einzulesen in einer FKT:
char *feld()
{
char static array[100];int i;
for (i =0; array[i] != EOF ; i++)
scanf("%c", &array[i]);return array;
}
int main()
{
char *ptr;
ptr = feld();getch();
return 0;
}
Irgendwie schaffe ich es nicht, das array zurück zu übergeben an die Hauptfunktion?
Ich habe auch versucht meine 2. "logische" wahl , die fkt und den pointer als INT pointer zu deklarieren anstatt char
aber es kommt irgendetwas wirres herauswürde mich über konstruktiven input bedanken
lg mike
-
Hallo,
das Problem ist, dass
array
nur in der Funktionfeld
gilt.
Edit: Sorry, hab dasstatic
übersehen.
Übergib der Funktion doch das Array:void feld (char array[], size_t len) { ... } int main () { char arr[100]; feld (arr, 100); return 0; }
Deine Schleife dürfte btw nicht terminieren. Verwende doch
getchar
und terminiere bei\r
und/oder\n
und wenn du am Array-Ende angekommen bist.
-
Für eine beliebig lange Eingabe reicht ein Array fester Größe nicht aus, du brauchst dann irgendwas mit dynamischer Speicherreservierung ( Array, Liste, etc. )
In deinem Fall kannst du also 99 Zeichen einlesen, das 100ste ist für die Nullterminierung.So würde deine Funktion ( etwas geändert ) Zeichen einlesen, bis das Array voll ist, wobei die Beliebigkeit an der Arraygrenze endet:
char *feld() { static char array[100] = {0}; int i = 0, c = 0; while (1) { c = getchar(); // scanf ist hier nicht geeignet. if ( c == '\n' || c == EOF ) break; if ( i == sizeof array/sizeof array[0] -1 ) //Arraygrenze prüfen! { puts("Array zu klein!"); // Nullterminator würde überschrieben werden. break; } array[i++] = (char)c; } return array; } int main() { char *ptr; ptr = feld(); puts(ptr); getch(); return 0; }