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 heraus

    würde mich über konstruktiven input bedanken 🙂

    lg mike



  • Hallo,

    das Problem ist, dass array nur in der Funktion feld gilt.
    Edit: Sorry, hab das static ü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; 
    }
    

Anmelden zum Antworten