Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Paul_H
Anmeldungsdatum: 01.02.2006 Beiträge: 52 Wohnort: Bonn
|
Verfasst am: 19. Mai 2006 11:35 Titel: halbwegs dynamisches Array? |
|
|
Hallo zusammen.
Ich soll ein C-Programm schreiben, in dem der Benutzer ein Vektor eingeben kann (beliebig lang, maximale Grenze jedoch vorgegeben), welcher dann auf verschiedene Weise bearbeitet werden kann.
Wie kriege ich die Eingabefunktion so hin, dass diese weiß, wann der User keine Zahlen mehr eingeben will, sprich, der User weniger Zahlen eingibt als die maximale Grenze vorschreibt? Wenn ich dass hinkriege, ist es ja auch kein Problem mehr, die eingegebenen Zahlen in ein Array zu füllen... |
|
Nach oben |
|
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 19. Mai 2006 15:31 Titel: |
|
|
Ich würd das so machen, dass in dem Moment, in dem keine Zahl eingegeben worden ist, die Frage kommt, ob das jetzt alles war. Wenn die mit j beantwortet wird is Schluss.
Irgendwo musst du ja sowieso prüfen, ob die eingegebene Zahl gültig ist, da kannst du das von mir vorgeschlagene an der Stelle ganz einfach mit einbinden. _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
Paul_H
Anmeldungsdatum: 01.02.2006 Beiträge: 52 Wohnort: Bonn
|
Verfasst am: 19. Mai 2006 20:56 Titel: |
|
|
Ich bin ja noch ganz neu im Bereich C-Programmierung, deswegen entschuldige, wenn die Frage bei den Pro's nur Kopfschütteln verursacht. Aber ich muss ja definieren, welcher Typ eingegeben wird. Wenn ich jetzt plötzlich einen anderen Typ eingebe, wirft er doch eine Exception, oder nicht?
Ich könnte natürlich den Typ auf String/char setzen, vorausgesetzt, es gibt eine Transformationsmethode, wie ich anschließend passende chars in int's bzw. double's etc. umwandeln kann.
Aber da kommt mir eine bessere Idee: Jedesmal, wenn ich eine Zahl eingeben lasse, frage ich den Benutzer erneut, ob noch eine weitere Zahl gewünscht wird. Die darauffolgende Eingabe könnte dann vom Typ String/char sein.
Ich denk' so probier' ichs mal. Ist zwar nicht sehr elegant, aber das Programm an sich find ich ja schon ziemlich bescheuert |
|
Nach oben |
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 19. Mai 2006 21:19 Titel: |
|
|
Na ja... Du musst die Benutzereingabe ja sowieso in n Int casten, damit du die in den Vector einfügen kannst. Denn das, was so ne Eingabezeile liefert, ist ja erst mal n String (respektive Char-Array).
Vor dieser Umwandlung solltest du natürlich prüfen, ob die Umwandlung überhaupt sinnvoll ist. Soweit ich weiß, heißt casten bei C ja eigentlich nur, dass das Bitmuster anders interpretiert wird. Deswegen wird es da kaum Fehler geben. Aber es kommt halt Blödsinn raus.
Von daher muss ne Überprüfung rein, ob das ne gültige Zahl war, die da eingegeben worden ist. Wenn dies der Fall ist, wird sie in den Vector gepackt, wenn nicht kannst du die Frage stellen, die eventuell alles abbricht. _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
Paul_H
Anmeldungsdatum: 01.02.2006 Beiträge: 52 Wohnort: Bonn
|
Verfasst am: 20. Mai 2006 02:13 Titel: |
|
|
Der Vollständigkeit halber stelle ich jetzt meine Funktion noch in den Thread. Wie gesagt, es ist vielleicht nicht die eleganteste Lösung für das besprochene Problem, und im Ablauf des Programms auch nicht die benutzerfreundlichste , aber ed lübbt, und was will man mehr, wenns nur ums üben geht?
void eingabe(){
double a;
int i=0;
int c;
printf("\nSie koennen hoechstens 300 Elemente einfuegen.\n");
loop:
if(i==298){printf("Achtung, Sie können höchstens noch ein Element einfügen!!!");}
printf("Bitte geben Sie ein Element ein. ");
scanf("%lf", &a);
vektor[i]=a;
i++;
printf("\nMoechten Sie noch ein weiteres Element einfuegen?\n 0 fuer Nein, bel. Taste fuer Ja. ");
scanf("%d", &c);
if(c!=0){goto loop;}
z=&i;
menu();
}
void ausgabe(){
int j;
for(j=0; j<*z; j++){printf("%.2lf ", vektor[j]);} menu();
}
Für Verbesserungs- oder Veredelungsvorschläge würde ich mich natürlich freuen, ich sachte ja schon, ich programmiere erst seit zwei Wochen in C. |
|
Nach oben |
|
|
ED209
Anmeldungsdatum: 30.05.2005 Beiträge: 122
|
Verfasst am: 20. Mai 2006 02:30 Titel: |
|
|
Ich nehme mal an dass du vorher Basic oder so eine Ferkelei gelernt hast.
"goto" solltest prinzipiell vermeiden, das ist zwar in c noch drin gilt aber nicht als schoener Stil, da solche Spruenge den Code schnell unleserlich machen.
Code: |
loop:
...
if(c!=0){goto loop;}
|
laesst sich problemlos durch
Code: |
do
{
...
} while (c>0);
|
ersetzen.
Aber fuer zaehlende Schleifen gibt es auch die 'for'-Anweisung. Gewoehn dir ja keine Sauereien an! :)
btw. was passiert wenn man versucht mehr als 300 Elemente einzugeben? _________________ +++++++++++++[>++++>+<<-]>.--.>---. |
|
Nach oben |
|
|
Paul_H
Anmeldungsdatum: 01.02.2006 Beiträge: 52 Wohnort: Bonn
|
Verfasst am: 20. Mai 2006 12:04 Titel: |
|
|
OK, danke. Ich wußte nicht, dass das goto so eine verpönte Sache ist.
Zitat: | btw. was passiert wenn man versucht mehr als 300 Elemente einzugeben? |
Ich habe mir ursprünglich gedacht, ich mache eine for-Schleife, die 300 mal durchgeht, beziehungsweise abbricht, wenn der Benutzer kein neues Element mehr einfügen will. Dann wäre das betrachtete Problem kein Problem mehr. Nur fehlt mir hier der Abbruchbefehl. Ich kenne da halt nur "break", und das kann ich nur auf INNERE Shleifen awenden. Ich könnte jetzt natürlich so schlau sein und folgendes machen:
int i=0;
while(i<1){
for(...){
...
break;}
i++}
aber das gefällt mir überhaupt nicht im Bezug sauberer Programmierstil. |
|
Nach oben |
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 20. Mai 2006 12:46 Titel: |
|
|
Hm... Ich kenn jetzt C nicht wirklich, aber ich seh keinen Grund, warum das break nicht funktionieren sollte, wenn du die while-Schleife weglässt... *kopfkratz*
Ist C in der Hinsicht wirklich so seltsam? _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
Gast
|
Verfasst am: 20. Mai 2006 15:19 Titel: |
|
|
return |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum nicht herunterladen
|
|