Zeichenketten



  • Hallo,

    Ich hab schwierigkeit diese 2 Probleme zu bewältigen...

    Problem 1:

    Ich Schreibe ein E.bay Programm. Indem man zubeginn gefragt wird wieviel Artikel
    man verkauft habe. Dementsprechend müsste man auch die Anzahl der Artikel die verkauft worden sind deren Namen Eingeben. Ebenfalls die Kosten die entstanden sind.

    int main(void)
    {
    	int i = 0;
    
    	char eingabe[100][2];
    
    	for ( i = 0; i < 2; i++ ) 
    	{
    	printf("Eingabe:");
    	fflush(stdin);
    	fgets(eingabe,100,stdin);
    	}
    
    	for ( i = 0; i < 2; i++ ) 
    	{
    		printf("%s",eingabe);
    	}
    
    }
    

    Problem 2:
    Mit welchen Index ich den Array bei beginn des Programms festlegen
    soll ist mir nicht ganz klar, weil das abhängig von der Eingabe des
    Programmausführer ist.

    Müsste man das Problem mit Dynamischer Speicherverwaltung lösen
    oder geht das auch anders?

    #include <stdio.h>
    
    float kosten[?] 
    
    printf("Wieviel Artikel wurden Verkuauft?");
    
    scanf("%i",&anzahl);
    
    for ( i = 0; i < anzahl; i++)
    {
    printf("Kosten Produkt %i ",anzahl);
    scanf("%f",kosten[anzahl]);
    }
    
    }
    

    Gruß



  • Zu 1)

    enum {MAX_DESC_LENGTH = 100};
    	printf("Wie viele Artikel wurden verkauft? ");
    	int nr;
    	scanf("%d", &nr);
    	int prices[nr];
    
    	char tmp[MAX_DESC_LENGTH+1]; // Puffer
    	char names[nr][MAX_DESC_LENGTH+1]; // '\0'-terminated
    
    	int i;
    	for(i=0; i<nr; ++i) {
    		getchar(); // entfernt '\n' aus Tastaturpuffer. Beim ersten Durchlauf aus der nr-Eingabe, bei den Restlichen aus der prices-Eingabe
    		printf("Artikel-Bezeichnung: ");
    		fgets(tmp, MAX_DESC_LENGTH+1, stdin);
    		sscanf(tmp, "%s", names[i]); // entfernt '\n'
    
    		printf("Kosten: ");
    		scanf("%d", &prices[i]);
    	}
    

    Zu 2) s.o.



  • danke!

    Ich hab auch mal ein eigenen Lösungsansatz versucht.
    Ist meine Variante auch möglich?

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    int main(void)
    {
    	int anzahl = 0;
    	int *zahl;
    	int i = 0;
    
    	printf("Wieviel Speicher anfordern?");
    	scanf("%i",&anzahl);
    
    	zahl = (int*) malloc ( anzahl * sizeof (int));
    
    	if ( zahl == NULL ) { printf("Kein Speicher vorhanden!");}
    
    	if ( zahl != NULL ) { printf ("\nSpeicher wurde Reserviert!\n");}
    
    	for ( i = 0; i < anzahl; i++ )
    	{
    		printf( "\n\t[ E I N G A B E # %i ]\n", i + 1 ); 
    		scanf("%i",&zahl[i]);
    	}
    
    	for(i = 0; i < anzahl; i++ )
    	{
    		printf("\n%i",zahl[i]);
    	}
    
    }
    

    gruß



  • hmm, naja

    • thou shalt not cast malloc, yet thou didst 😉
    • Eine Warnung für den Benutzer, dass malloc NULL zurückgibt, ist nett aber bringt dem Programmfluss gar nichts. Sollte malloc NULL zurückliefern, gibst du nur eine unnötige Warnung, greifst aber trotzdem auf den (angeblich reservierten) Speicher zu. Folge ==> Crash! Aus diesem Grund ist deine zweite if-Anweisung nach malloc auch unsinnig.
    zahl = malloc ( anzahl * sizeof (*zahl));
    
    if ( zahl == NULL ) 
    { 
        printf("Kein Speicher vorhanden!");
        return 1; /* VORGANG ABBRECHEN */
    }
    printf ("\nSpeicher wurde Reserviert!\n");
    ...
    
    • du bist gierig und ein monopolist, du willst deine Resourcen nicht freigeben 😉 sprich: du hast nie den Speicher freigegeben, wo ist free(zahl) geblieben?
    • int Funktionen sollten auch etwas zurückliefern, das gilt auch für die main-Funktion.

Anmelden zum Antworten