Avatar billede vorherre Nybegynder
11. august 2001 - 23:47 Der er 27 kommentarer og
2 løsninger

Hva faen sker der her??

Hej!
Er der nogen der kan se hvad faen der er galt her?
Det er vel ikke strengt nødvendig at allokere en char pointer dynamisk.. eller hva\'??

char*name;
cout<<\"Indatst fulde navn : \";
cin.getline(name,sizeof(name)-1);
cout<<endl;
Avatar billede stigc Nybegynder
11. august 2001 - 23:50 #1
det holder ikke det du skriver, hvad er sizeof(name)-1?
Det bliver 3 bytes da det bliver størrelsen på en pointer.
Avatar billede erikjacobsen Ekspert
11. august 2001 - 23:51 #2
jo. du har afsat en pointer, men ikke noget den peger på.
Hmm, hvodden er\'t nu?

char *name;
name = malloc(1000);
Avatar billede stigc Nybegynder
11. august 2001 - 23:51 #3
prøv:

char*name;
cout<<\"Indatst fulde navn : \";
cin.getline(name,20);
cout<<endl;
Avatar billede erikjacobsen Ekspert
11. august 2001 - 23:52 #4
cout<<\"Indatst fulde navn : \";
cin.getline(name,1000-1);
cout<<endl;
Avatar billede stigc Nybegynder
11. august 2001 - 23:53 #5
ja du er nok også nød til at finde lidt plads til teksten, ellers kan det gå hen og blive farligt. :)
Avatar billede erikjacobsen Ekspert
11. august 2001 - 23:54 #6
Ups, den værste fejl har hverken stigc eller jeg fundet:
  cout<<\"Indtast fulde navn : \";
Avatar billede stigc Nybegynder
11. august 2001 - 23:56 #7
æhhh ??? Den er da god nok. Oder was?
Avatar billede vorherre Nybegynder
11. august 2001 - 23:57 #8
Problemet er at c++ hader whitespace i sin cin>>

Derfor er jeg nødt til at bruge cin.getline..
Jeg prøver sq lige et af forslagne..
Avatar billede erikjacobsen Ekspert
11. august 2001 - 23:58 #9
stigc: en lilel satvefjel småend
Avatar billede vorherre Nybegynder
12. august 2001 - 00:05 #10
Det her har intet med stavefejl at gøre..
Problemt er at Cin>>name; ikke kan tage mellemrum.
Så hvis man skal indtaste sit navn i en string skal det gøres anderledes..
Avatar billede stigc Nybegynder
12. august 2001 - 00:08 #11
Nej stavefejlen er C++ nok ligeglad med... :)
Avatar billede erikjacobsen Ekspert
12. august 2001 - 00:09 #12
Ja, ja, for(i=0;i<100;i++) print \"ja\"; - det var en lille vittighed.....
og selvfølgelig skal du bruge getline - men blot allokere inden.
Avatar billede vorherre Nybegynder
12. august 2001 - 00:11 #13
Er du sikker på at det er nødvendig at allokere??
Avatar billede kamikaze Nybegynder
12. august 2001 - 12:47 #14
Hvis du bruger et array istedet for en pointer, er der allokeret plads:

char navn[20];
cout << \"Indtast navn >\";
cin.getline(navn, 20);
cout << navn;

ellers skal der allokeres plads:

char *navn;
navn = new char[20];
cout << \"Indtast navn >\";
cin.getline(navn, 20);
cout << navn;
Avatar billede kamikaze Nybegynder
12. august 2001 - 12:56 #15
Hvis du absolut skal bruge en pointer (der IKKE må allokeres) kan du bruge en temp. char pointer:

char *navn;
char *temp = new char[50];
cout << \"Indtast navn >\";
cin.getline(temp, 50);
strcat(navn, temp);
cout << navn;
Avatar billede stigc Nybegynder
12. august 2001 - 13:02 #16
kamikaze >> Nu bruger du da ram du ikke har kontrollen over, eller hvad?
Avatar billede vorherre Nybegynder
12. august 2001 - 15:52 #17
Kamikaze har ret i det han siger. Men prøv at kigge på dette lille program. Det virker ikke.

Hvis jeg fjerner cin>>valg; virker det.
Fatter ikke en skid..

int main(int argc, char* argv[])
{
int valg=0;
cin>>valg;cout<<valg;

char navn[20];
cout<<\"Indtast fulde navn  \";
cin.getline(navn,20); cout<<navn;
}
Avatar billede erikjacobsen Ekspert
12. august 2001 - 16:25 #18
Linien hvor du læser tallet er ikke slut, så derfor
tager getline resten - og den er sikkert tom.
Du kan spole videre til næste linie med en ekstra
  cin.getline(navn,20);
lige efter du har erklæret navn.
Avatar billede erikjacobsen Ekspert
12. august 2001 - 16:28 #19
Nå ja, hvis man vil bruge det der nymodens new i C++ (som
en gammel C-programmør har svært ved at vænne sig
til ...) så skal man

#include <malloc.h>

og

char* navn;
navn = (char*)malloc(20;

Avatar billede erikjacobsen Ekspert
12. august 2001 - 16:29 #20
...hvis man IKKE vil bruge det der nymodens new...
Avatar billede vorherre Nybegynder
12. august 2001 - 17:01 #21
Du skriver at cin>> ikke er færdig, hvordan skal det forstås? Der er både semikolan og en cout<< bagefter cin>>. Så at den ikke skulle være færdig med at tage tal ind fatter jeg ikke??
Avatar billede erikjacobsen Ekspert
12. august 2001 - 17:06 #22
Prøv at se på denne linie bestående af cifrene 7913 samt CR og LF
(carriage return og line feed, dvs. slut på en linie). Maskinen holder styr
på hvor langt du er kommet med din læsning, og lad mig illustrere det med
en * - det er altså ikke et tegn. Jeg skriver også CR og LF som <CR> og
<LF>, men de er altså blot et tegn hver. Ved starten er det

*7913<CR><LF>

så beder du om cin>>valg, som er en int, og så læse den tallet, så længe der
er noget der ligner et tal:

7913*<CR><LF>

Vi står altså lige før linieskiftet. Så kommer getline, og skal læse det der står
på linien hen til linieskiftet. Fint, siger den, det var nemt, 0 tegn, så jeg afleverer
den tomme streng, og spoler forbi linieskiftet:

7913<CR><LF>*

og er klar til en eventuel næste linie.
Avatar billede vorherre Nybegynder
12. august 2001 - 17:19 #23
Det lyder lidt rodet det der..
Du siger at selvom taster et tal ind ved cin>> valg; og derefter trykker enter, ja så står cin>>valg; altså stadig åben for indtastning af tal?? Der er der ingen problemer med at lave to cin>> efter hinanden..
Avatar billede erikjacobsen Ekspert
12. august 2001 - 17:24 #24
Hvis du laver 2 cin>>etelleandettal lige efter hinanden start de begge to
med at lede efter cifre. Dvs. nummer 2 skipper stille og roligt blanke og linieskift,
som det nu er nødvendigt. Det er faktisk noget rod. Jeg kan forstå det, men ikke
li\' det, så jeg læser gerne en linie af gangen, f.x. med getline. Den skipper til
efter linieskiftet.
Avatar billede vorherre Nybegynder
12. august 2001 - 17:30 #25
Hmm. Det her er værre end jeg troede..

Kan man bruge cin.getline til indtastning af tal??
Istedet for cin>>??
Avatar billede erikjacobsen Ekspert
12. august 2001 - 17:34 #26
Ja, så får du en streng med cifre - og så skal du lave den om til en int.
Det er der noget indbygget til - kan ikke huske det lige nu for C++.....
(har heller ikke lige tid....)
Avatar billede vorherre Nybegynder
12. august 2001 - 17:37 #27
Er den der atio() du tænker på??
Avatar billede vorherre Nybegynder
12. august 2001 - 17:47 #28
Jeg takker for svarene til alle..
Avatar billede erikjacobsen Ekspert
12. august 2001 - 18:20 #29
Ja, den virker!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester