helby Geschrieben 2. Oktober 2006 Geschrieben 2. Oktober 2006 hallo ich habe ein Projekt: Ich soll in c++ ein Chat programmieren. Der Benutzer soll sich mit dem Computer "unterhalten". Ich habe 24 Sätze (12 Aussagen + 12 Fragen) auf arrays gelegt und möchte diese 1 mal auslesen. dh. 1 Anwort oder frage. Hier ist der Quellcode, vielleicht kann mir mal einer helfen!!??!! :confused: #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <iostream> #include <iomanip> #include <string> using namespace std; void main() { string Name; string Antwort; string Laune; string Text; int Alter; int i=1; //int x; string elviraAntwort[12]={"Ehrlich?Das kann ich nicht glauben","Vielleicht, man sollte nichts unversucht lassen", "Ja sowas finde ich auch nicht nett!", "Nenn mir einen der sowas mag!","hmm, dann ist ja gut", "Aha, es ist dir also ernst!", "Ich will noch mehr hören.", "Sprich dich ruhig aus.", "Draußen ist schönes Wetter.", "Ich bin ein bisschen muede.", "Es ist nett sich mit dir zu unterhalten.", "hmm. Ich weiß nicht..."}; string elviraFrage[12]={"Was genau meinst du?","Jetzt ernsthaft oder was?", "Bestehst du immer auf dein Recht?", "Warum sollte man soetwas tun?","Sonst noch was?", "Wie bitte?", "Sollten wir nicht nochmal in Ruhe darueber reden?", "Hat man die keine Manieren beigebracht??", "Was findest du nur daran?", "Waer es fuer dich denn in Ordungn?", "Meinst du es macht Spass dir zuzuhoeren?", "Und wie gings weiter?"}; cout<<"Hallo ich bin Elvira. Ich moechte mich unterhalten!"<<endl; cout<<"Wie heissen Sie? "; cin>>Name; cout<<"Hallo, "<<Name<<"! Schoen Sie kennenzulernen!"<<endl; cout<<"Wie alt sind Sie?"<<endl; cin>>Alter; if (Alter<=30 ) cout<<"Sehr schoen, ich bin 25."<<endl; else cout<<"Oh, so alt? Ich bin 25"<<endl; cout<<"Darf ich Sie duzen?"<<endl; cin>> Antwort; if (Antwort=="ja") cout<<"Sehr schoen, das ist persoenlicher!"<<endl; else cout<<"Das finde ich nicht nett, ich gehe!"<<endl; cout<<"Wie geht es dir?"<<endl; cin>> Laune; if (Laune=="gut") cout<<"Das ist ja wunderbar!"<<endl; else if (Laune=="schlecht") cout<<"Tut mir leid, was ist denn los?"<<endl; cin>>Text; srand(0); for(i=0; i<12; i++) { elviraAntwort = rand(); //x + 1; cout<<elviraAntwort; } cin>>Text; }; Zitieren
Klotzkopp Geschrieben 3. Oktober 2006 Geschrieben 3. Oktober 2006 Ich habe 24 Sätze (12 Aussagen + 12 Fragen) auf arrays gelegt und möchte diese 1 mal auslesen. dh. 1 Anwort oder frage. Hier ist der Quellcode, vielleicht kann mir mal einer helfen!!??!! :confused: Könntest du nochmal genau beschreiben, wo das Problem liegt? Was genau ist die Aufgabenstellung, und inwiefern weicht das Verhalten deines Codes davon ab? Zitieren
Hakawamu Geschrieben 4. Oktober 2006 Geschrieben 4. Oktober 2006 in einem array von strings kannst du z.b. den 1. string mit string Antwort = elviraAntwort[0]; auslesen. das hast du ja schon am Ende deines Codes versucht ... Hast aber ziemlich mist gebaut *g* guck dir mal genau an was du da machst probiers mal mit: int randwert = rand() % 12; cout<<elviraAntwort[randwert] << "\n"; so bekommst du eine zufallszahl zwischen 0 und 12. anschliessend gibst du den string mit dem index zurück, den "randwert" für dich hält. wenn du alle auslesen willst, dann kannst du das mit: for(int i = 0; i < 12; i++) { cout << elviraAntwort[i] << "\n"; } wenn deine frage damit nit beantwortet ist, stell deine frage präziser. Zitieren
helby Geschrieben 4. Oktober 2006 Autor Geschrieben 4. Oktober 2006 Hallo, danke schön, das beantwortet meine frage. habe erst vor 2 mon mit programmieren angefangen, habe deswegen noch kleine schwierigkeiten. Zitieren
baba007 Geschrieben 4. Oktober 2006 Geschrieben 4. Oktober 2006 Hallo, danke schön, das beantwortet meine frage. habe erst vor 2 mon mit programmieren angefangen, habe deswegen noch kleine schwierigkeiten. wenn ich ein vorschlag machen darf: lerne die Vorteile einer OOP für dich zu nutzen und missbrauche nicht die Syntax von C++ für klasische C Aufgaben. So lernt man nichts halbes und nix ganzes Zitieren
Hakawamu Geschrieben 5. Oktober 2006 Geschrieben 5. Oktober 2006 wenn ich ein vorschlag machen darf: lerne die Vorteile einer OOP für dich zu nutzen und missbrauche nicht die Syntax von C++ für klasische C Aufgaben. So lernt man nichts halbes und nix ganzes erm, so lernt man das leider im informatikunterricht in der berufsschule jedenfalls bei uns in niedersachsen :-( Zitieren
Gruni Geschrieben 5. Oktober 2006 Geschrieben 5. Oktober 2006 wenn ich ein vorschlag machen darf: lerne die Vorteile einer OOP für dich zu nutzen und missbrauche nicht die Syntax von C++ für klasische C Aufgaben. So lernt man nichts halbes und nix ganzes Könntest du dich bitte genauer fassen? Weil cih weiß nicht was dadran falsch sein soll. Zitieren
helby Geschrieben 5. Oktober 2006 Autor Geschrieben 5. Oktober 2006 ehm....ich würd auch gern mal nachfragen, was daran falsch sein soll. Die Aufgabe stammt aus BBS Unterricht und auf diese weise müsst ich mich mit schleifen, arrays und abfragen befassen. Hast du nicht auch irgendwann mal klein angefangen, oder bist du so allwissend auf die welt gekommen???:cool: Zitieren
Klotzkopp Geschrieben 5. Oktober 2006 Geschrieben 5. Oktober 2006 wenn ich ein vorschlag machen darf: lerne die Vorteile einer OOP für dich zu nutzen und missbrauche nicht die Syntax von C++ für klasische C Aufgaben. So lernt man nichts halbes und nix ganzes Ich würde das nicht Missbrauch nennen. Man kann in C++ objektorientert programmieren, weil die Sprache das unterstützt. C++ unterstützt aber auch andere Programmierparadigmen. Zitieren
helby Geschrieben 9. Oktober 2006 Autor Geschrieben 9. Oktober 2006 in einem array von strings kannst du z.b. den 1. string mit string Antwort = elviraAntwort[0]; auslesen. das hast du ja schon am Ende deines Codes versucht ... Hast aber ziemlich mist gebaut *g* guck dir mal genau an was du da machst probiers mal mit: int randwert = rand() % 12; cout<<elviraAntwort[randwert] << "\n"; so bekommst du eine zufallszahl zwischen 0 und 12. anschliessend gibst du den string mit dem index zurück, den "randwert" für dich hält. wenn du alle auslesen willst, dann kannst du das mit: for(int i = 0; i < 12; i++) { cout << elviraAntwort[i] << "\n"; } wenn deine frage damit nit beantwortet ist, stell deine frage präziser. Klappt soweit ganz gut, danke :confused: ich will nur 1 zufallsantwort ausgeben. wie funktioniert das?? Zitieren
Hakawamu Geschrieben 9. Oktober 2006 Geschrieben 9. Oktober 2006 Klappt soweit ganz gut, danke :confused: ich will nur 1 zufallsantwort ausgeben. wie funktioniert das?? wie schon gesagt ... probiers mal mit: Code: int randwert = rand() % 12; cout<<elviraAntwort[randwert] << "\n"; Zitieren
helby Geschrieben 10. Oktober 2006 Autor Geschrieben 10. Oktober 2006 int randwert = rand() % 12; ... void antwort() {for(int i = 0; i < 12; i++) { cout << elviraAntwort[randwert] << "\n"; } } Es wird 12 mal die selbe Antwort ausgegeben. Ich hätt die gern nur 1 mal ;-) Meine Ausgabe jetzt: Hamster tod Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! Aha, es ist dir also ernst! möchte gern: Hamster tod Aha, es ist dir also ernst! Zitieren
helby Geschrieben 10. Oktober 2006 Autor Geschrieben 10. Oktober 2006 Ah ja, dazu kommt noch, dass immer die gleiche antwort kommt, auch wenn ich das programm neustarte. kann das sein, dass der die zufallszahl nicht richtig zieht?? Zitieren
Hexagon Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 Moin, das mit den Zufallszahlen ist so eine Sache. Da es nur Pseudozufallszahlen sind mußt du am Besten am Beginn deines Programms den Zufallszahlengenerator mit der aktuellen Systemzeit reseten. void antwort() {for(int i = 0; i < 12; i++) { cout << elviraAntwort[randwert] << "\n"; } } Es wird 12 mal die selbe Antwort ausgegeben. Ich hätt die gern nur 1 mal ;-) Nun schau dir bitte mal den fetten Code genau an. EDIT: Ha, habs wieder gefunden! srand( (unsigned)time( NULL ) ); Zitieren
helby Geschrieben 10. Oktober 2006 Autor Geschrieben 10. Oktober 2006 Fehlermeldung int randwert = rand() % 12; srand( (unsigned)time( NULL ) );//error C3861: "time": Bezeichner wurde nicht gefunden. ... und was jetzt? fehlt irgendein include?? #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include "conio.h" #include <iostream> #include <iomanip> #include <string> .. ich bilick nicht mehr durch.-... Zitieren
Hexagon Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 Fehlermeldung int randwert = rand() % 12; srand( (unsigned)time( NULL ) );//error C3861: "time": Bezeichner wurde nicht gefunden. Öhm...helby...die Initialisierung sollte schon vor dem Benutzen erfolgen, oder? fehlt irgendein include?? #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include "conio.h" #include <iostream> #include <iomanip> #include <string> .. ich bilick nicht mehr durch.-... Ein kleiner Blick in die Hilfe? Ich will mal nicht so sein: #include <time.h> Zitieren
helby Geschrieben 10. Oktober 2006 Autor Geschrieben 10. Oktober 2006 void antwort() {//srand( (unsigned)time( NULL ) ); for(int i = 0; i < 1; i++) {cout<< elviraAntwort[randwert] << "\n";} } ändert nix... Zitieren
Hexagon Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 Was ändert sich nicht? :mod: Zitieren
helby Geschrieben 10. Oktober 2006 Autor Geschrieben 10. Oktober 2006 Fehlermeldung, "time": Bezeichner wurde nicht gefunden Zitieren
Hexagon Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 Ich rate dir dringend mal den Umgang mit der Dokumentation zu üben! Ein kleiner Blick in die Hilfe? Ich will mal nicht so sein: #include <time.h> Zitieren
Joe Kinley Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 Ausserdem sollte die Zufallszahl auch in der Schleife immerwieder neu gesetzt werden .... Zitieren
Hexagon Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 Ausserdem sollte die Zufallszahl auch in der Schleife immerwieder neu gesetzt werden .... Das würde ich nicht tun! Jedenfalls nicht wenn man den Zufallsgenerator mit der Zeit zurücksetz. Die Schleife läuft so schnell durch das dann wieder immer die selben Zahlen heraus kämen! Zitieren
helby Geschrieben 10. Oktober 2006 Autor Geschrieben 10. Oktober 2006 ES kommen ja immer die selben zahlen raus, bzw. immer dieselbe aussage. was kann ich tun? void antwort() {sunsigned int randwert = rand() % 12;... rand((unsigned int) time(NULL)); //srand(time(0)); for(int i = 0; i < 1; i++) {cout<< elviraAntwort[randwert] << "\n";} } So sieht das im dosfenster aus: Hallo ich bin Elvira. Ich moechte mich unterhalten! Wie heissen Sie? ol Hallo, ol! Schoen Sie kennenzulernen! Wie alt sind Sie? 20 Sehr schoen, ich bin 25. Darf ich Sie duzen? ja Sehr schoen, das ist persoenlicher! Wie geht es dir? gut Das ist ja wunderbar! jap Aha, es ist dir also ernst! natuerlich! Wie bitte? klar Aha, es ist dir also ernst! ja Wie bitte? ... ziemlich nervig Zitieren
Klotzkopp Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 was kann ich tun?Mit ein wenig mehr Nachdenken an die Sache rangehen, nicht am Code frickeln und schauen, was passiert. Du musst einmal srand aufrufen, und zwar bevor zum ersten Mal rand aufgerufen wird. Das alles steht schon hier im Thread, es fehlt nur an der Umsetzung durch dich. Zitieren
Hexagon Geschrieben 10. Oktober 2006 Geschrieben 10. Oktober 2006 SO: srand((unsigned int) time(NULL)); unsigned int randwert = rand() % 12;... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.