Programm Bug
-
Hey Leute ,
ich habe aus spaß an der freude einen love-o-meter geschrieben !
man gibt 2 namen ein und der ermittelt eine zufallszahl und eine kleine minimal grafik ^^.Problem ist folgende
gebe ich:
name1: blaaaaa
name2: baaaaa2geht's...aber gebe ich ein
name1: doooof blaaaa
name2: /nimmt der "doof" als ersten namen und "blaaaa "als zweiten namen is der ausgabe !
könnt ihr mir da helfen !?
#include<iostream> #include<time.h> #include<stdio.h> using namespace std; int main() { char name1[30]; char name2[30]; int zufall; int bla; int bla2; bla2=0; bla=0; printf(" Willkommen zum Love-O-Meter\n\n"); printf(" $$$$$$$$$$$$__$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$\n"); printf(" $$$$$$$\n"); printf(" $$$\n\n"); srand(time(0)); zufall = (rand() % (100 -1 + 1)); cout<<"Bitte geben sie den ersten Namen ein (weiblich) : "; scanf("%s", &name1); cout<<"Bitte geben sie den zweiten Namen ein (maennlich) : "; scanf("%s", &name2); printf("\n"); printf("|"); do { cout<< "-"; bla ++; } while(bla <= zufall/10); do { cout<< " "; bla2 ++; } while(bla2 <= 10-bla); printf("|"); printf("\n"); printf("</3 <3"); printf("\n\n"); printf("Auswertung : %s und %s passen zu %i %% zusammen !\n\n" ,name1 , name2 , zufall); system("PAUSE"); }Vielen Danke und lieben Gruß.
-
Versuch dich erst einmal von C zu trennen (printf/scanf etc.) und verwende cin (nimmst ja schließlich auch cout) und schau dir das mal in Verbindung mit getline und string an. Char-Arrays solltest du auch möglichst schnell verdrängen.
-
ok werde ich machen ... ma gucken was mit google so zu deinen begriffen sagen wird...
-
Strings: (variable Länge etc.)
http://www.cppreference.com/wiki/string/startin/output mit C++:
http://www.cppreference.com/wiki/io/startgetline (ganze Zeile einlesen):
http://www.cppreference.com/wiki/string/getline
-
es funktioniert immer noch nicht ... jetz bekomm ich ne schöne fehlermeldung von windoof -.- ^^
#include<iostream> #include<time.h> #include<stdio.h> #include<string> using namespace std; int main() { string name1; string name2; int zufall; int bla; int bla2; bla2=0; bla=0; printf(" Willkommen zum Love-O-Meter\n\n"); printf(" $$$$$$$$$$$$__$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$$$$$\n"); printf(" $$$$$$$$$$$$$\n"); printf(" $$$$$$$\n"); printf(" $$$\n\n"); srand(time(0)); zufall = (rand() % (100 -1 + 1)); cout<<"Bitte geben sie den ersten Namen ein (weiblich) : "; //scanf("%s", &name1); getline(cin , name1); cout<<"Bitte geben sie den zweiten Namen ein (maennlich) : "; //scanf("%s", &name2); getline(cin , name2); printf("\n"); printf("|"); do { cout<< "-"; bla ++; } while(bla <= zufall/10); do { cout<< " "; bla2 ++; } while(bla2 <= 10-bla); printf("|"); printf("\n"); printf("</3 <3"); printf("\n\n"); printf("Auswertung : %s und %s passen zu %i %% zusammen !\n\n" ,name1 , name2 , zufall); system("PAUSE"); }wo is der fehler ?

-
Denyo schrieb:
[...]wo is der fehler ?

Überall.
Du hast auch längst nicht alle Tipps umgesetzt, die Dir gegeben wurden.
-
ich will ja auch nicht meinen ganzen source extra ändern ... ich will doch nur diebegründung wissen warum der nach dem leerzeichen das als 2tes wort nimmt...
dachte wenn ich das dann mit getline mache müsste das doch reichen , will ja gar nicht extra alles ändern...
-
Denyo schrieb:
ich will ja auch nicht meinen ganzen source extra ändern ... ich will doch nur diebegründung wissen warum der nach dem leerzeichen das als 2tes wort nimmt...
dachte wenn ich das dann mit getline mache müsste das doch reichen , will ja gar nicht extra alles ändern...
Der Grund dafür, dass Dein Programm abschmirgelt liegt darin, dass printf nicht typsicher ist.
Mit std::string kann printf nicht umgehen, aber das weiss es nicht und merkt es auch nicht. Würdest Du cout benutzen, müsstest Du Dir um die Typen keine Gedanken mehr machen, weil Dir das cout abnimmt.
-
In der Zwischenzeit könntest du name1.c_str() verwenden, um wieder ein const char* zu bekommen. Aber cout wäre sicherlich die bessere Wahl.
Beispiel:
cout << "Hallo dies ist ein TEst mit den Werten: " << a << " " << b << " und jetzt ein string: " << meinSTring << endl;
-
vielen dank
#include<iostream> #include<time.h> #include<stdio.h> #include<string> using namespace std; int main() { string name1; string name2; int zufall; int bla; int bla2; bla2=0; bla=0; cout<<" Willkommen zum Love-O-Meter\n\n"; cout<<" $$$$$$$$$$$$__$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$$$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$$$$$\n"; cout<<" $$$$$$$$$$$$$\n"; cout<<" $$$$$$$\n"; cout<<" $$$\n\n"; srand(time(0)); zufall = (rand() % (100 -1 + 1)); cout<<"Bitte geben sie den ersten Namen ein (weiblich) : "; //scanf("%s", &name1); getline(cin , name1); cout<<"Bitte geben sie den zweiten Namen ein (maennlich) : "; //scanf("%s", &name2); getline(cin , name2); cout<<"\n"; cout<<"|"; do { cout<< "-"; bla ++; } while(bla <= zufall/10); do { cout<< " "; bla2 ++; } while(bla2 <= 10-bla); cout<<"|"; cout<<"\n"; cout<<"</3 <3"; cout<<"\n\n"; cout<<"Auswertung : "<<name1<<" und "<<name2<< " passen zu "<<zufall<<"% zusammen !\n\n"; system("PAUSE"); }bug ist behoben und funktioniert einwand frei

LG
~closed ~
