2013-11-10, 03:28
  #1
Medlem
Har precis börjat med c++ för några timmar sen, sitter och ska göra ett litet program. Det är en meny med olika val. Om man väljer valet att starta om så ska den hoppa till början. Googlade och hittade olika lösningar med for och while loop också goto. Vet inte riktigt hur jag ska lägga in det i min kod dock. Har varit vaken väldigt länge så det kanske är svårt att förstå mig, och min problem lösar förmåga ligger inte på top.

Här är exempel på kod jag tänkte använda:

HTML-kod:
#include <cstdlib>
#include <iostream>

using namespace std;
using std::cout;
using std::cin;
using std::string;

int main(int argc, char *argv[])
{
    int menyval1;
    cout << "frågan med de olika alternativen, man ska svara med siffra för respektiva alternativ och sen enter. Valen man kan välja är 1-4 sen 99 för att starta om.";
    cin >> menyval1;
    
    if (menyval1 == 1)
    {
         
    }
    
    else if (menyval1 == 2)
    {
          
    }
    
    else if (menyval1 == 3)
    {
        
    }
    
    else if (menyval1 == 4)
    {
         
    }
    
    else if (menyval1 == 99)
    {
         
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

hur gör jag så att det startar om om jag trycker 99 sen enter?
Citera
2013-11-10, 03:37
  #2
Medlem
Batman182s avatar
while menyval != 99.

Eller så använder du en loop med en bool som sätts till true när menyval == 99 (dumt dock när du kan göra som jag sa först) eller så använder du en "goto-sats", dock har jag hört att det inte bemöts speciellt positivt. Vet ärligt talat inte varför då jag tycker det är en enkel lösning ibland.
Citera
2013-11-10, 04:35
  #3
Medlem
Citat:
Ursprungligen postat av Batman182
while menyval != 99.

Eller så använder du en loop med en bool som sätts till true när menyval == 99 (dumt dock när du kan göra som jag sa först) eller så använder du en "goto-sats", dock har jag hört att det inte bemöts speciellt positivt. Vet ärligt talat inte varför då jag tycker det är en enkel lösning ibland.

Ska det se ut så här?
HTML-kod:
#include <cstdlib>
#include <iostream>

using namespace std;
using std::cout;
using std::cin;
using std::string;

int main(int argc, char *argv[])
{
    while menyval != 99
    {
    int menyval1;
    cout << "frågan med de olika alternativen, man ska svara med siffra för respektiva alternativ och sen enter. Valen man kan välja är 1-4 sen 99 för att starta om.";
    cin >> menyval1;
    
    if (menyval1 == 1)
    {
         
    }
    
    else if (menyval1 == 2)
    {
          
    }
    
    else if (menyval1 == 3)
    {
        
    }
    
    else if (menyval1 == 4)
    {
         
    }
    
    else if (menyval1 == 99)
    {
         
    }
}
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Citera
2013-11-10, 11:36
  #4
Medlem
christerys avatar
du har inte deklarerat eller datasatt menyval, och använder sen menyval1... Kör det i kompilatorn så får du se...
Citera
2013-11-10, 14:14
  #5
Medlem
Batman182s avatar
Citat:
Ursprungligen postat av pakeli
Ska det se ut så här?
HTML-kod:
#include <cstdlib>
#include <iostream>

using namespace std;
using std::cout;
using std::cin;
using std::string;

int main(int argc, char *argv[])
{
    while menyval != 99
    {
    int menyval1;
    cout << "frågan med de olika alternativen, man ska svara med siffra för respektiva alternativ och sen enter. Valen man kan välja är 1-4 sen 99 för att starta om.";
    cin >> menyval1;
    
    if (menyval1 == 1)
    {
         
    }
    
    else if (menyval1 == 2)
    {
          
    }
    
    else if (menyval1 == 3)
    {
        
    }
    
    else if (menyval1 == 4)
    {
         
    }
    
    else if (menyval1 == 99)
    {
         
    }
}
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Nästan rätt, du kan inte deklarera menyval1 inne i loopen, du måste göra det innan.
Citera
2013-11-10, 23:24
  #6
Medlem
Löste det första problemet, tack för hjälpen! Har nu ett annat problem.

Sitter här och ska göra en krypterings application.

Behöver hjälp med själva algoritmen.

Jag vill att den ska omvandla det man vill kryptera till siffror(t.ex a nummer 1 och b nummer 2 osv) och sen plussa på krypterings nyckeln omvandlad till siffror. Så om man har meddelande a(1)b(2)c(3) och krypteringsnyckel a(1)b(2)c(3) så ska den krypterade texten bli b(1+1)d(2+2)f(3+3). Jag antar att varje tecken har ett nummer på något sätt eller att man tilldelar nummer till alla olika bokstäver och siffror.

av krypteringen ska naturligvis göra samma sak fast åt andra hållet.

hoppas ni förstod vad jag menade, tack på förhand.

Kod:
#include <iostream>
#include <string>


using namespace std;

int main()
{
    std::string secret;
    std::string encryption_key;
    std::string encrypted;
    std::string decrypted;
    int meny1;
	
    char key = 'x'; 
    
    cout << "Press 1 for encryption.\nPress 2 for decryption.\nPress enter to lock in your choice.\n";
    cin >> meny1;
    
    if (meny1 == 1)
    {
          cout << "Please enter data.\n";
          cin >> secret;
          
          cout << "Enter encryption key.\n";
          cin >> encryption_key;
          
          for(int i = 0; i < secret.size(); ++i)
          {
//Här ska algoritmen för att kryptera vara, den ska använda sig av secret och encryption_key.
          }
          
          cout << "Encrypted data: " << encrypted;
    }
    
    else if (meny1 == 2)
    {
          cout << "Enter encrypted data.\n";
          cin >> encrypted;
          
          cout << "Enter encryption key.\n";
          cin >> encryption_key;
          
          for(int i = 0; i < secret.size(); ++i)
          {
//Här ska algoritmen för att avkryptera vara, den ska använda sig av encrypted och encryption_key.
          }
          
          cout << "Decrypted data: " << decrypted;
    }    
   
    return 0;
    system("pause");
}
Citera
2013-11-11, 01:16
  #7
Medlem
Råder dig att använda dig av en while-loop och en switch-case istället för 100-tals if-satser Using std::cout/cin/string är onödigt. Du har redan inkluderat cin och cout genom att inkludera "iostream" (input/output stream), samt att du kan skippa string och inkludera <string> istället. Koden nedan visar ett exempel, while-loopen körs tills användaren matar in 99 (exit), switch-case används för att kolla de olika inmatningarna, t.ex. case 1 = menyval 1, case 2 = menyval 2 etc. etc.

Kod:
#include <cstdlib> // varför har du denna?
#include <iostream>
#include <string> //använt istället för using std::string
using namespace std;

int main(int argc, char *argv[]) //Varför har du argument här? Dem används inte i koden.
{
    int menyval1;
    cout << "frågan med de olika alternativen, man ska svara med siffra för respektiva alternativ och sen enter. Valen man kan välja är 1-4 sen 99 för att starta om.";
    cin >> menyval1;
    
	while(menyval1 != 99)
	{
	  switch(menyval1)
	  {
	   case 1:
           //TODO
           break;
	  }
	
	cout << "blablablabla" << endl;
	cin >> menyval1;
	}
    
    system("PAUSE");
    return 0;
}

Hoppas du förstod min förklaring! Är lite halvkass på att förklara och är själv ganska ny på c++
Råder dig att INTE använda dig utav goto, de flesta programmerare hatar den lösningen och anses som "fulkodning".
__________________
Senast redigerad av qpB 2013-11-11 kl. 01:19.
Citera
2013-11-11, 02:14
  #8
Medlem
Citat:
Ursprungligen postat av qpB
Råder dig att använda dig av en while-loop och en switch-case istället för 100-tals if-satser Using std::cout/cin/string är onödigt. Du har redan inkluderat cin och cout genom att inkludera "iostream" (input/output stream), samt att du kan skippa string och inkludera <string> istället. Koden nedan visar ett exempel, while-loopen körs tills användaren matar in 99 (exit), switch-case används för att kolla de olika inmatningarna, t.ex. case 1 = menyval 1, case 2 = menyval 2 etc. etc.

Kod:
#include <cstdlib> // varför har du denna?
#include <iostream>
#include <string> //använt istället för using std::string
using namespace std;

int main(int argc, char *argv[]) //Varför har du argument här? Dem används inte i koden.
{
    int menyval1;
    cout << "frågan med de olika alternativen, man ska svara med siffra för respektiva alternativ och sen enter. Valen man kan välja är 1-4 sen 99 för att starta om.";
    cin >> menyval1;
    
	while(menyval1 != 99)
	{
	  switch(menyval1)
	  {
	   case 1:
           //TODO
           break;
	  }
	
	cout << "blablablabla" << endl;
	cin >> menyval1;
	}
    
    system("PAUSE");
    return 0;
}

Hoppas du förstod min förklaring! Är lite halvkass på att förklara och är själv ganska ny på c++
Råder dig att INTE använda dig utav goto, de flesta programmerare hatar den lösningen och anses som "fulkodning".

Tack för hjälpen!

Vet du möjligvis hur man ska lösa det andra problemet jag har (finns i min senaste kommentar)?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in