Det är så när du kör ett dos program från windows, de stängs alltid när de är avslutade. Tror det räcker med att du lägger in en cin på slutet, men jag är inte helt säker.
En sak som du inte har frågat om men som jag ändå hjälper till med är att ditt program kommer inte att fungera eftersom du deklarerar utrymme för 1 tecken men du läser antagligen in ett helt namn i det utrymmet. Du måste deklarera en array med tecken för att kunna läsa in flera tecken.
Ett tips till, läs vidare i boken tills du kommer fram till inläsning av strängar, hoppa inte över kapitel :)
i conio.h finns getch(); som du kan ha i slutet av programmet för rutan inte ska stängas ner, lättare än cin för med cin i slutet måste du ha en variabel att mata in till och sen måste du ju klicka på två tangenter(både en knapp och enter) och med getch(); bara en tangen ;)
om du började idag så är svaret char
Om du läser detta svar när du har läst lite till om C++ är svaret std::string :)
Detta är enligt mig ett stort problem vid utlärandet av C++. String bör helt klart läras ut före char[], som kräver pekarkunskaper för att förstå helt. String är mycket mer naturligt och helt att föredra när man läser C++.
i conio.h finns getch(); som du kan ha i slutet av programmet för rutan inte ska stängas ner, lättare än cin för med cin i slutet måste du ha en variabel att mata in till och sen måste du ju klicka på två tangenter(både en knapp och enter) och med getch(); bara en tangen ;)
getch() är inte ANSI-standard.
cin.get() funkar utmärkt om man ser till att inte ha en massa tecken i inmatningsbufferten.
Detta är enligt mig ett stort problem vid utlärandet av C++. String bör helt klart läras ut före char[], som kräver pekarkunskaper för att förstå helt. String är mycket mer naturligt och helt att föredra när man läser C++.
Har man inte pekarkunskaper så förstår man nog inte String _helt_ heller. :p
Jag anser att man ska lära sig char[] först.
Det är definitivt inte nödvändigt att kunna pekare för att använda string. Däremot tror jag det är bra att veta hur det egentligen fungerar med pekare för det är svårt att komma ifrån dem i C++.
Jag tycker pekare, trots de problem många faktiskt har med dem, är något som ska läras ut tidigt. Minneshantering i allmänhet är något som varje programmerare bör ha koll på imho.
Det är definitivt inte nödvändigt att kunna pekare för att använda string.
Nej, inte för att kunna använda, men för att kunna _förstå helt_. Då menar jag hur klassen är uppbyggd och hur den fungerar. :)
Phorpher skrev:
Jag tycker pekare, trots de problem många faktiskt har med dem, är något som ska läras ut tidigt. Minneshantering i allmänhet är något som varje programmerare bör ha koll på imho.
Finessen med OOP:
Man behöver inte veta hur ett object fungerar inuti, endast hur det fungerar utåt för att kunna använda det.
Och jo, men behöver kunna pekare för att kunna använda char[]
//Vad betyder detta?
int strlen(char*);
//Varför fungerar inte detta?
cin >> len;
char str[len];
Man behöver alltså kunna pekare för att kunna hantera strängar, men man behöver inte kunna pekare för att göra (sina första) program i C++. Det är det (bland annat) som skiljer C från C++, dvs inkapsling.
Detta är ett typiskt program som man skulle kunna visa en nybörjare:
#include <iostream>
#include <string>
int main()
{
using namespace std;
cout << "Vad heter du?";
string namn;
getline( cin, namn );
cout << "Ni heter " << namn << "!";
}
Då frågar jag: varför ska man istället för att lära ut detta program till en nybörjare inleda med att lära ut C-strängar för att mycket senare visa detta, mycket enklare, sätt?
Man lär ju inte ut Pascal genom att säga till eleven att han ska deklarera sina strängar så här:
var
str : ^Char;
Mer än ni tror kan göras i C++ utan pekare. Dynamisk minneshantering kan skötas med hjälp av containers. Många elever har mycket svårt för pekare och där har ni en god anledning att inte introducera dem första dagen.
Red: Försök skriva mitt exempel-program med C-strängar så att det blir lika lätt att förstå för en nybörjare med bibehållen god kodningsstandard. Det är inte så lätt som det verkar, och i C så är det omöjligt!
Finessen med OOP:
Man behöver inte veta hur ett object fungerar inuti, endast hur det fungerar utåt för att kunna använda det.
Och jo, men behöver kunna pekare för att kunna använda char[]
//Vad betyder detta?
int strlen(char*);
//Varför fungerar inte detta?
cin >> len;
char str[len];
Man behöver alltså kunna pekare för att kunna hantera strängar, men man behöver inte kunna pekare för att göra (sina första) program i C++. Det är det (bland annat) som skiljer C från C++, dvs inkapsling.
Jag håller helt med dig att OOP är ett bra sätt att lära ut grunderna i programmering för att man gömmer de krångliga bitarna som t.ex. minneshanteringen (Det är därför många högskolor börjat med Java som förstaspråk). Dock anser jag att man inte bör vänta för länge med att faktiskt berätta vad som händer under skalet; T.ex. låta eleverna skriva en enkel version av stringklassen.
Sang-drax skrev:
Mer än ni tror kan göras i C++ utan pekare. Dynamisk minneshantering kan skötas med hjälp av containers. Många elever har mycket svårt för pekare och där har ni en god anledning att inte introducera dem första dagen.
Jag är väl medveten om C++ möjligheter till att låta bli att peta på pekare överhuvudtaget. Man bör nog dock inte låta eleverna "invaggas" i en helt "trygg" och pekarfri värld. ;)
Jag tror att vi pratar förbi varandra litegranna. Jag menar givetvis inte att man ska gå in på pekare första dagen men vid; säg en 5-poängskurs på högskolan så bör iaf. pekare ha nämnts...
Tja, det hela beror väl på vart man vill komma med sina studier? Ska man utveckla ny teknik och nya verktyg eller utveckla program i en människa/dator interaktion?
Jag tror att för de studenter som ska gå mot en djupare förståelse inom datorer bör läsa arkitektur först och sen klättra uppåt i abstraktion, snarare än (som nu) tvärtom. (Har man en förståelse för datorarkitektur blir pekare en kakbit).
Jag menar givetvis inte att man ska gå in på pekare första dagen men vid; säg en 5-poängskurs på högskolan så bör iaf. pekare ha nämnts...
jag håller med dig.
Fast jag läste nyligen 5p nybörjar-C++ på distans (Vill ha enkla poäng eftersom jag ligger i lumpen :) ) och där nämndes faktiskt inte pekare. Det nämndes iofs inte särskilt mycket alls (inte string heller).
Ett förtydligande: Det är fullt möjligt att använda std::string utan att veta ett endaste litet dyft om vad OOP är, än mindre kunna hantera det. String används som en helt vanlig datatyp.
259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25