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.
- thou shalt not cast malloc, yet thou didst