Hej allihopa jag har ett litet problem som jag inte kan hitta en lösning, (ganska självklart att jag skriver här då hehe). du läser in din data i en loop, tex så här jo iofs, det var ju ett bra sätt, jag håller på att skriva om mitt programm nu men jag kom på en sak Du tänker fel! jo jag vet de! =)) Använd INTE goto!!! Redan på 60-talet insåg man att goto är roten till massor av problem i programutveckling. Koden blir svårläst och ostrukturerad. Om du känner ett behov av astt använda goto för att göra det du vill bör du tänka om. Troligtvis är designen fel och behöver göras om. jo men finns det inget som helst sätt att gå till olika platser i ett program? >du hade inte du en lösning eller kom du bara för att säga det där? Men det här är ett riktigt STORT program!! De måste kunna hoppa från t.ex. menyer tillbaka till en annan meny! <b>>Men det här är ett riktigt STORT program!!</b> Lite kaxig är du iaf! =)) >men men, kan en funktion retunera char? <b>>Lite kaxig är du iaf! =)) </b> Peter: Hur gör man det? int vet jag, men det enda settet jag kan få att funka med att retunera en char är att deklarera dunktionen som string och sedan retunera en string #1 är det okey om man använder sig av return då? hej igen! Skönt att du inte tog det så hårt, det är bättre att få rätt från början än att utgå från fel sätt. Visst, det är bra att lära sig så mycket som möjligt, men det är samtidigt så att det är bättre att lära sig rätt och grundläggande än fel och bara göra det knöligt för sig.resetta eller bryta en funktion
först kod exemplet sen problemet
kode är som följande:
void nytt()
{
char name[101];
cout << "mata in ditt namn: ";
cin.getline(name, 101);
if ((strcmp(name, "oj")==0))
nytt();
//punk #2
......
}
mitt problem är det att jag vill ju att den som skriver oj (eller bryter mot något annat argument jag kanske skulle skriva) ska ha en chans att försöka igen men genom att köra om funktionen igen så kommer programmet när den är klar med den funktionen sedan fortsätta från punkt #2 och då med andra ord köra allt som är efter punkt #2 två eller flera ggr (beroende på hur många gånger man skriver fel).
Hur ska jag göra, snälla ni gör mig en sån svinskän tjänst om ni kan hjälpa mig! bara att ni läst detta bugar jag för!! =)
Mvh
TedSv: resetta eller bryta en funktion
void nytt()
{
char name[101];
do {
cout << "mata in ditt namn: ";
cin.getline(name, 101);
} while (strcmp(name, "oj") == 0));
}Sv: resetta eller bryta en funktion
jag kom på: jag har/hadde en möjlighet att man kunde skriva så gick han till(baka) till funktionen huvudmeny(); men hur ska jag impletera den i en while loop. Jag kan ju skriva allt argument och om något inte fylls så blir t.ex. fel=1 (fel =vad while loopen är beroende på).
Mvh
TedSv: resetta eller bryta en funktion
Utgå inte ifrån "hur löser jag det?", utan börja med att förstå vad sakerna gör.
Syftet med en while-loop är att upprepa något så länge något villkor är uppfyllt, syftet med en funktion är att göra en _väl_ avgränsad procedur. En funktion ska ha en klar uppgift, och ska bara utföra den uppgiften.
Du ska inte "gå tillbaka till funktionen", men du kanske ska anropa funktionen igen. Ett enkelt consoleprogram kan t.ex. se ut så här:
int main()
{
ShowMenu();
std::string s = GetName();
while(s!="oj");
{
DisplayName(s);
s=GetName();
}
}
Och sen lägger du in vettiga funktioner.Sv: resetta eller bryta en funktion
men hur ska jag annars lösa det? du hade inte du en lösning eller kom du bara för att säga det där?
hur är det med den där goto syntaxen, typ sätt en bestämd punkt och sedan goto till den? börjar prorgammet om där ifrån då?
jag läste att den bestämda punkten endast kunde vara innom samma funktion men med den kan man iaf hoppa över saker verkar det som! Finns det någon annan bättre lösning? Jag vill ju hoppa till en bestämd plats i programmet.
Tack på förhand!
Mvh
TedSv: resetta eller bryta en funktion
/PerSv: resetta eller bryta en funktion
Sv: resetta eller bryta en funktion
Jag har inget färdigt program som gör just det du vill göra, eftersom jag inte är helt säker på vad det är du vill göra. Jag kom för att "bara säga" att du är på fel väg; tänk om enligt den principen jag sa!
>jo men finns det inget som helst sätt att gå till olika platser i ett program?
Det var ju precis det som var min poäng!
TÄNK INTE PÅ DET SÄTTET!
Du ska istället tänka strukturerat. Dela in programmet i mindre delar: Vad ska programmet göra?
Så som jag förstod det skulle en användare först skriva in en sträng, tills den skriver in rätt, sen skriva in en annan sak tills det blir rätt osv.
Då kan du fundera; är det fundamentalt olika saker som ska skrivas in, så passar det bäst med något i stil med:
while(felsträng1)
nyindata1;
while(felsträng2)
nyindata2;
while(felsträng3)
nyindata3;
Finns det istället en vettig uppsättning frågor som är likadana skriver du nåt i stil med
for(i=1; i<3; i++)
{
insträng=indata(i);
while(insträng inte är ok)
insträng=indata(i);
}
Det är klart att vi kan säga att "du kan skriva Position1: och sen skriva goto Position1; om du har allt i main", men det fullständigt jävla vansinnigt, så lyssna istället på vad vi säger!Sv: resetta eller bryta en funktion
Hur ska jag klara av de?
En fråga till faktiskt: Under vilka former och/eller omständigheter skulle det bli fel när man använde goto pos? Om man vet vad man gör och inte missar något utan endast börjar om funktionen så kan det ju inte göra något, eller hur?
Mvh
TedSv: resetta eller bryta en funktion
I förhållande till ganska mycket annan kod så tror jag faktiskt det är ett förhållandevis litet program...
Och varför säger du det, är det för att du inte orkar skriva om det?
Eller är det för att det inte skulle kunna gå med den approachen jag säger?
<b>> De måste kunna hoppa från t.ex. menyer tillbaka till en annan meny!</b>
Återigen: du tänker på fel sätt!
<b>>En fråga till faktiskt: Under vilka former och/eller omständigheter skulle det bli fel när man använde goto pos? Om man vet vad man gör och inte missar något utan endast börjar om funktionen så kan det ju inte göra något, eller hur?</b>
Det är inte det att det automatiskt blir fel för att man använder goto. Problemet är att det har många extremt stora nackdelar att programmera och tänka på det sättet. Om du nu skriver så, så kan det vara så att det funkar JUST NU.
Men om du vill ändra en liten grej - då kan hela programmet sluta fungera för att du använde en goto. Och det är inte så att du inte kommer ändra något, även om du tror det, program ändras alltid.
Samma sak med "om man vet vad man gör". Det är väldigt lätt att tro det, men det är inte så.
Man kan ta en parallell till en fabrik. Om man gör på det sättet du har tänkt så kan man se det som att det står folk utspridda över ett fabriksgolv, alla gör något, och de skickar saker mellan sig. Det kan funka, om alla bara har rätt instruktioner och inget behöver ändras. Så fort något behöver ändras så får alla nya instruktioner och det blir fel om man inte kollar att alla verkligen gör rätt.
Den lösning jag föreslår är att man har tydlig avdelningar. En avdelning sköter en viss sak, en annan gör en annan, osv. Blir det fel i någon avdelning byter man ut den. Det är hur enkelt som helst att veta var ett problem uppstår, och det räcker att fixa just det problemet, och det är det enda som behövs göras.
Säg istället vad ditt program ska göra och arbeta utifrån det.
Jag kan ge ett tips: använd notepad eller något annat enkelt. Skriv vad du programmet ska göra; kort och koncist. Sen delar du upp det i delar. Sen går du igenom varje av de delarna och tänker "är det här en självklar egen del av programmet?". I så fall så är det en funktion. Är det inte det så delar du upp den delen och tittar på samma sätt på varje liten del, osv.
Det låter som om det inte behövSv: resetta eller bryta en funktion
humf
men men, kan en funktion retunera char?Sv: resetta eller bryta en funktion
Ja, en funktion kan returnera vilket datatyp som helst.
/PeterSv: resetta eller bryta en funktion
Jag vet att det kan låta lite hårt men eftersom jag skrev mitt första kodrad för typ15-16 år sen, och eftersom jag inte fick veta hur man borde göra fick jag lära mig det den hårda vägen. Det är viktigt att man hajar vilken princip man bör följa, för annars blir det fel direkt.
Att använda goto och liknande är den mest grundläggande formen av programmering. Den högre graden av programmering kallas för "strukturerad programmering", och det är det man använder när man skriver t.ex. while, for osv. I den nivån behöver man _aldrig_ använda saker som goto.
Ett steg ytterligare högre är "funktionell programmering", och det är då man använder funktioner. I varje funktion använder man sen funktionell programmering eller strukturerad programmering, tills man har löst problemet.
Ytterligare en nivå är objektorienterad programmering, OOP, då det är väldigt mycket abstraktare. Å andra sidan är det mycket effektivare att arbeta med, mycket lättare, och ger bättre resultat.
Så lita på det jag säger och ställ din fråga utfrån det synsättet.
Det är för din skull jag säger det här; jag själv har ingen större nytta av att svara på frågor, jag gör det bara för att jag tycker det är kul att hjälpa till. Men jag kan inte hjälpa till om det är från fel utgångspunkt...Sv: resetta eller bryta en funktion
finns det något annat lättare sätt?Sv: resetta eller bryta en funktion
#2 hur skulle du göra om du skulle vilja börja om från början i en funktion?
t.ex. om du har en massa babbel och så en fråga if (blablabla)
{
vad skulle du skriva här för att få starta om funktionen?
}Sv: resetta eller bryta en funktion
jag har sovit på de du sagt Niklas och nu förstår jag, tack så mycket för det där snacket om funktioner!! När jag sa att programmet ÄR stort menade jag mer att programmet KOMMER bli stort, det har lixom väldigt stora potentialer att bli stort (asså massa kod, vi snackar mängder) så det där snacket med funktioner var riktigt snällt!!!
har du icq eller msn eller nått sådant?
skulle vara kul att få lära känna dig! One programmer to another!
Mvh
TedSv: resetta eller bryta en funktion
Jag har för vana att inte lämna ut mitt ICQ-nummer, men jag kan göra ett undantag. Du får det på iMail (alltså mailgrejen på pellesoft).