Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

halbwegs dynamisches Array?

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 19. Mai 2006 11:35    Titel: halbwegs dynamisches Array? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 19. Mai 2006 15:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 19. Mai 2006 20:56    Titel: Antworten mit Zitat

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 Big Laugh
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 19. Mai 2006 21:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 20. Mai 2006 02:13    Titel: Antworten mit Zitat

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 Big Laugh , 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
Benutzer-Profile anzeigen Private Nachricht senden
ED209



Anmeldungsdatum: 30.05.2005
Beiträge: 122

BeitragVerfasst am: 20. Mai 2006 02:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 20. Mai 2006 12:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 20. Mai 2006 12:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gast






BeitragVerfasst am: 20. Mai 2006 15:19    Titel: Antworten mit Zitat

return
Nach oben
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++ Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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