n00b - Hvorfor går den forbi mine "cin" sætninger?
Det er det største program jeg har lavet til dato... hvilket siger lidt om hvor meget jeg ved :D Har på nuværende tidspunkt været programmør i ca 2 døgn...
problemet med den her kode er at den virker- og så alligevel ikke... jeg kan uden problemer compile den og åbne den... men det er kun de 3 første cin commands der bliver spurgt om ... de andre bliver bare sprunget over... Nogen som ved hvorfor så må de meget gerne sige det ^^
#include <iostream.h> #define yes 'yes'
int main () { int age; cout << "please name you're exact age: "; cin >> age; int birthdate; cout << "please enter you're birthdate in the form: daymonthyear, for example: 160578: "; cin >> birthdate; char firstname; cout << "please enter you're first name(s): "; cin >> firstname; char lastname; cout << "please enter you're last name(s): "; cin >> lastname;
char reply; cout << "Do you really mean that you're name is " << firstname << " " << lastname; cout << " and that you're birthdate is " << birthdate; cout << ", meaning that you're age is " << age; cout << "?\n"; cout << "please answer, yes or no: "; cin >> reply;
if (reply == yes) { cout << "Well that's to bad...\n"; cout << "That means that you're wanted by the United States authorities for\n"; cout << " global terrorism, in association with Osama Bin-Laden.\n"; cout << "At this very moment elite troups are making way towards the place\n"; cout << " to which we have traced you're IP-address.\n"; cout << "Do not attempt to respond as this is an automated process\n\n"; cout << " Have a nice day."; } else { cout << "Please come back when you know who you are.\n\n"; cout << " Have a nice day."; }
Din #define yes er ikke rigtig, det burde være: #define yes "yes" Et navn kan normalt være mere end et tegn, så firstname etc. bør være: char firstname[102]; Man kan ikke sammenligne et char array med en streng, så brug strcmp()
hvis jeg laver #define yes 'yes' om til "yes" fremkommer der en fejl under compileringen... jeg er desuden bange for at jeg lige skal have en nærmere forklaring angående de [102] du har sat bag ved firstname... betyder det at der kan være 102 characters eller hvordan?
Der kommer en fejl fordi du sammenligner en char (replay) med yes, men replay skal være 4 char's lang hvis brugeren skal kunne taste "yes", dvs replay skal være char replay[4]; Du kan så lave sammenligningen med if(!strcmp(replay, yes)) char whatever[102], betyder at whatever kan indeholde 101 karakterer og en nul terminering.
jeg må se mig slået :D ---- Thx for hjælpen men det er desværre det forkerte problem du har løst :-/ Hvis du compilerer programmet og kører det vil du sikkert bide mærke i at den kun spørger efter alder og fødselsdato... resten springer den lige så smukt hen over... hvilket gør programmet ret virkningsløst... hvis du desuden har et fræk forslag til hvordan man kan skrive fødselsdatoen op ville det bare være guld...
Den springer over fordi du taster mere end et tegn for navn inden du taster enter, og programmet forventer kun et tegn (en char). Hvis du kun taster et tegn for first name og last name virker det (indtil din if(...)).
har du prøvet at compile den? her hos mig kan jeg nemlig ikke nå at skrive noget... den går direkte ned så jeg efter at have tastet age og birthdate bare skal trykke på en vilkårlig tast og så er den skid slået :-/
det jeg mente med at skrive birthdate op er at hvis man bare skriver den ud i et bliver der en masse misforsåelser da det foreste "0" ikke bliver skrevet... ( 11283 ) <--- hvornår er han født? hvis du skriver med bindestreger bliver kun første led taget med og med punktumer bliver det et helt andet tal...
please name you're exact age: 12 please enter you're birthdate in the form: daymonthyear, for example: 160578: 999999 please enter you're first name(s): u please enter you're last name(s): p Do you really mean that you're name is u p and that you're birthdate is 999999, meaning that you're age is 12? please answer, yes or no: yes Please come back when you know who you are.
dev-c++ ... den nyeste jeg kunne finde på blodsheed... har fået den til at modtage mit navn nu.. please name you're exact age: 17 please enter you're birthdate in the form: .day.month.year, for example: .16.05. 78: 999999 please enter you're first name(s): a please enter you're last name(s): b Do you really mean that you're name is .½┴w x☺= and that you're birthdate is 999 999, meaning that you're age is 17? please answer, yes or no: yes Please come back when you know who you are.
Have a nice day.Tryk på en vilkårlig tast for at fortsætte . . .. men den siger bare en masse tegn efterfølgende :S
#include <iostream.h> #define yes "yes"
int main () { int age; cout << "please name you're exact age: "; cin >> age; int birthdate; cout << "please enter you're birthdate in the form: .day.month.year, for example: .16.05.78: "; cin >> birthdate; char firstname[102]; cout << "please enter you're first name(s): "; cin >> firstname; char lastname[102]; cout << "please enter you're last name(s): "; cin >> lastname;
char reply[4]; cout << "Do you really mean that you're name is " << firstname << " " << lastname; cout << " and that you're birthdate is " << birthdate; cout << ", meaning that you're age is " << age; cout << "?\n"; cout << "please answer, yes or no: "; cin >> reply;
if (reply == yes) { cout << "Well that's to bad...\n"; cout << "That means that you're wanted by the United States authorities for\n"; cout << " global terrorism, in association with Osama Bin-Laden.\n"; cout << "At this very moment elite troups are making way towards the place\n"; cout << " to which we have traced you're IP-address.\n"; cout << "Do not attempt to respond as this is an automated process\n\n"; cout << " Have a nice day."; } else { cout << "Please come back when you know who you are.\n\n"; cout << " Have a nice day."; }
Jeg rettede din if(...) til: if (!strcmp(reply, yes))
Og kompilerede med gcc og fik:
please name you're exact age: 99 please enter you're birthdate in the form: .day.month.year, for example: .16.05.78: 999999 please enter you're first name(s): Peter please enter you're last name(s): Hansen Do you really mean that you're name is Peter Hansen and that you're birthdate is 999999, meaning that you're age is 99? please answer, yes or no: yes Well that's to bad... That means that you're wanted by the United States authorities for global terrorism, in association with Osama Bin-Laden. At this very moment elite troups are making way towards the place to which we have traced you're IP-address. Do not attempt to respond as this is an automated process
Jeg ved ikke hvorfor den skriver .½┴w x☺= og ikke det rigtige navn (a b). gcc er i mit tilfælde cygwin (der ikke vil køre kommandoen pause i system(...)).
int main () { int done = 0; do { int age; cout << "please name you're exact age: "; cin >> age; char birthdate[9]; cout << "please enter you're birthdate in the form: day.month.year, for example: 16.05.78: "; cin >> birthdate; char firstname[33]; cout << "please enter you're first name(s): "; cin >> firstname; char lastname[33]; cout << "please enter you're last name(s): "; cin >> lastname;
cout << "are you sure ? please answer, yes or no: "; char reply[4]; cin >> reply;
int main () { int age; cout << "please name you're exact age: "; cin >> age; int birthdate; cout << "please enter you're birthdate in the form: daymonthyear, for example: 160578: "; cin >> birthdate; char firstname; cout << "please enter you're first name(s): "; cin >> firstname; char lastname; cout << "please enter you're last name(s): "; cin >> lastname;
char reply[3]={0}; cout << "Do you really mean that you're name is " << firstname << " " << lastname; cout << " and that you're birthdate is " << birthdate; cout << ", meaning that you're age is " << age; cout << "?\n"; cout << "please answer, yes or no: "; cin >> reply;
if (strcmp(reply,"yes")) { cout << "Well that's to bad...\n"; cout << "That means that you're wanted by the United States authorities for\n"; cout << " global terrorism, in association with Osama Bin-Laden.\n"; cout << "At this very moment elite troups are making way towards the place\n"; cout << " to which we have traced you're IP-address.\n"; cout << "Do not attempt to respond as this is an automated process\n\n"; cout << " Have a nice day."; } else { cout << "Please come back when you know who you are.\n\n"; cout << " Have a nice day."; }
system("pause"); return 0; }
//Håber syntaxen er rigtig, har ikke lige nogen compiler her. Ellers marker strcmp og tryk F1.
>cars10, hvorfor mener du at du skal sætte firstname = {0} ? (samme for reply og lastname). Det segmose vist mener er at man skriver ud over enden på reply hvis man skriver for mange tegn, hvilket kan have fatale konsekvenser. Løsningen er svjv at bruge cin.getline(...) eller string istedet for char whatever[...]
Så kan man da bare lave reply[80] også det er kun nogle få byte her. Hvad jeg mente var at i det svar jeg gav skulle være firstname[80] så det også er en streng og jeg sætte firstname[80]={0} så er vi sikre på afslutnings tegnet kommer med. Syntes bare det var nemmest.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.