Forum: if / else if satsen

Forum huvudsida -> Programmering -> if / else if satsen

Sidor: 1

Till botten

Bookia 22:40 - 8:e Februari 2007 | Post #1
Medlem
Inlägg: 44


Skicka PM
Jaha,

då var det dags att köra fast i programmeringen. Det är garanterat något så otroligt barnsligt självklart och jag är en jubelidiot som inte ser det men nu är det tyvärr så. Smiley

Whats wrong with this picture?

  1. #include <iostream>
  2. #include "iodos.h" //Språkfil för svenska tecken
  3. using namespace std;
  4.  
  5. void skrivStjarnRad()
  6. {
  7. cout << "******************************" << endl;
  8. }
  9.  
  10. void utgang()
  11. {
  12. cout <<"Kom gärna tillbaka en annan gång." << endl;
  13. }
  14.  
  15. int main()
  16. {
  17. dos_console();
  18. char svar1, svar2;
  19. int antalRader;
  20. cout << "Vill du skriva ut en stjärnrad? " << "J/N" << endl;
  21. cin >> svar1;
  22. if (svar1 == 'J'||'j')
  23. {
  24. skrivStjarnRad();
  25. cout << "Vill du skriva ut fler stjärnrader?" << "J/N" << endl;
  26. cin >> svar2;
  27. if (svar2 == 'J'||'j')
  28. {
  29. cout << "Hur många rader vill du skriva ut?" << endl;
  30. cin >> antalRader;
  31. for (int i=1; i<=antalRader; i++)
  32. skrivStjarnRad();
  33. }
  34. else
  35. utgang();
  36. }
  37.  
  38. else
  39. utgang();
  40.  
  41. cin.get();
  42. }


Programmet kompileras men den gör inte det jag vill den ska göra. Så länge man svarar J/j så sköter den sig finfint. Men när man svarar N/n så gör den ändå samma sak som om man hade svarat J/j. Smiley
Uppenbarligen har jag inte begripit ett skit av hur if och else if satserna fungerar. Har försökt läsa mer i boken men tyvärr blir jag inte klokare. Smiley

-------------------------
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.
We are just an advanced breed of monkeys on a minor planet of a very average star.

Senast redigerad 23:02 - 8:e Februari 2007


Nissebosselasse 23:03 - 8:e Februari 2007 | Post #2
Medlem
Inlägg: 490


Skicka PM
Först och främst har du konstruerat if-satserna fel. Du har skrivit dom som du säger dom högt: om svar1 är lika med J eller j, när du i själva verket måste konstruera den så här: om svar1 är lika med J eller om svar1 är lika med j, d.v.s., du måste göra om jämförelsen två gånger.

Det andra felet är att du har påbörjat ett block (kod som innesluts mellan två måsvingar { }) efter if-satsen på rad 26. Om det är meningen att else-if-satsen på rad 32 ska matcha if-satsen på rad 26, måste du först avsluta blocket (m.h.a. en måsvinge } ).
Alltså:

if (svar1 == \\\'J\\\' || svar == \\\'j\\\') {    
    // Kod här
} else if (villkor här) {
    // Annan kod här
}


Här finns mer om if-satsen:


-------------------------
http://pushingcows.se
Gula Nallen



Smygis 08:30 - 9:e Februari 2007 | Post #3
Medlem
Inlägg: 90


Skicka PM
    Citat av Nissebosselasse:
Det andra felet är att du har påbörjat ett block (kod som innesluts mellan två måsvingar { }) efter if-satsen på rad 26. Om det är meningen att else-if-satsen på rad 32 ska matcha if-satsen på rad 26, måste du först avsluta blocket (m.h.a. en måsvinge } ).


Nej, Där är det nog du som har fått lite om bakfoten. På rad 32 har han en for-loop Smiley
Och är det bara en rad kod efter if/else if/else/for så behöver man inte måsvingar.



@Bookia

if (svar1 == 'J'||'j')

Felet du gör är att du läser || som "eller". Då det igentligen ska läsas som "eller om" så nu blir det:

Om svar1 är lika med 'j' eller om 'J'.

Efter som att 'J' är positivt så blir det sant hela tiden.

Samma sak med && det ska inte läsas som 'och' utan som 'och om'

-------------------------
Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS!

Senast redigerad 08:31 - 9:e Februari 2007


Bookia 09:46 - 9:e Februari 2007 | Post #4
Medlem
Inlägg: 44


Skicka PM
Nej, Där är det nog du som har fått lite om bakfoten. På rad 32 har han en for-loop Smiley

Jag är en hon. Smiley

if (svar1 == 'J'||'j')

Felet du gör är att du läser || som "eller". Då det igentligen ska läsas som "eller om" så nu blir det:

Om svar1 är lika med 'j' eller om 'J'.

Efter som att 'J' är positivt så blir det sant hela tiden.

Samma sak med && det ska inte läsas som 'och' utan som 'och om'


I boken står det såhär:
A && B = A and B = sant om både A och B är sanna
A || B = A or B = sant om minst en av A eller B är sanna.

Därifrån drog jag slutsatsen att om användaren knappar in ANTINGEN J eller j så är i alla fall båda sanna och satsen kickar igång.
Den första utsagan med && låter för mig att det krävs både J och j för att det ska vara sant. Typ att användaren måste knappa in både J och j. Hänger inte riktigt med där.

Har i alla fall bytt || mot && och det funkade inte. Smiley
Nu fungerar det när man väljer N/n men inte när man väljer J/j. Smiley

-------------------------
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.
We are just an advanced breed of monkeys on a minor planet of a very average star.



Smygis 09:59 - 9:e Februari 2007 | Post #5
Medlem
Inlägg: 90


Skicka PM
    Citat av Bookia:
Jag är en hon. Smiley


:huh:

if (svar1 == 'J'||'j')

Felet du gör är att du läser || som "eller". Då det igentligen ska läsas som "eller om" så nu blir det:

Om svar1 är lika med 'j' eller om 'J'.

Efter som att 'J' är positivt så blir det sant hela tiden.

Samma sak med && det ska inte läsas som 'och' utan som 'och om'


I boken står det såhär:
A && B = A and B = sant om både A och B är sanna
A || B = A or B = sant om minst en av A eller B är sanna.

Därifrån drog jag slutsatsen att om användaren knappar in ANTINGEN J eller j så är i alla fall båda sanna och satsen kickar igång.
Den första utsagan med && låter för mig att det krävs både J och j för att det ska vara sant. Typ att användaren måste knappa in både J och j. Hänger inte riktigt med där.

Har i alla fall bytt || mot && och det funkade inte. Smiley
Nu fungerar det när man väljer N/n men inte när man väljer J/j. Smiley


Nu missade du lite vad jag menade tror jag.
Han ovanför mig svarade bra på din fråga, Jag bara förklarade lite.

... Funderar nästan på att ge mig på att förklara boelisk algebra nu...

-------------------------
Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS!



Bookia 10:02 - 9:e Februari 2007 | Post #6
Medlem
Inlägg: 44


Skicka PM
Har nu modifierat koden, tanken var att försäkra mig att programmet läser det jag menar. Jag tycker dock inte om det. Jag vill hålla koden så ren som möjlig, hatar ställa femtioelva krav i main funktionen. Det är bättre att göra separata funktionssatser ovanför main så att koden blir tydligare och mindre plottrig. Så tänker jag i alla fall.

Nedanstående modifierad kod är kompilerbar. Men nu funkar INGENTING. Varken J/j eller N/n fungerar. Programmet hamnar direkt på cin.get(); vad man än skriver in.
Det är nåt lurt här med if satserna. ,,r det så att detta program inte kan skrivas med if satser överhuvudtaget?
Eller är det bara jag och mitt logiska förståelse som haltar?


  1. #include <iostream>
  2. #include "iodos.h" //Språkfil för svenska tecken
  3. using namespace std;
  4.  
  5. void skrivStjarnRad()
  6. {
  7. cout << "******************************" << endl;
  8. }
  9.  
  10. void utgang()
  11. {
  12. cout <<"Kom gärna tillbaka en annan gång." << endl;
  13. }
  14.  
  15. int main()
  16. {
  17. dos_console();
  18. char svar1, svar2;
  19. int antalRader;
  20. cout << "Vill du skriva ut en stjärnrad? " << "J/N" << endl;
  21. cin >> svar1;
  22. if (svar1 == 'J'&&'j')
  23. {
  24. skrivStjarnRad();
  25. cout << "Vill du skriva ut fler stjärnrader?" << "J/N" << endl;
  26. cin >> svar2;
  27. if (svar2 == 'J'&&'j')
  28. {
  29. cout << "Hur många rader vill du skriva ut?" << endl;
  30. cin >> antalRader;
  31. for (int i=1; i<=antalRader; i++)
  32. skrivStjarnRad();
  33. }
  34. else if (svar2 == 'N'&&'n')
  35. utgang();
  36. }
  37. else if (svar1 == 'N'&&'n')
  38. utgang();
  39.  
  40. cin.get();
  41. }


-------------------------
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.
We are just an advanced breed of monkeys on a minor planet of a very average star.



Bookia 10:14 - 9:e Februari 2007 | Post #7
Medlem
Inlägg: 44


Skicka PM
JAG FICK DET ATT FUNKA. Smiley
Nu när jag läste Nissebosselasses kommentar igen förstod jag vad han menade.
Har nu ändrat koden till if(svar1/2==\'J\'||svar1/2==\'j\') och motsvarande på alla ställen och nu funkar hela programmet. Smiley
Det där att man måste göra skriva jämförelsen om två gånger var nytt för mig. Det står inte så (tydligt) i boken och det har inte nämnts på föreläsningarna. Men nu vet jag det. Smiley

Smygis:
Du hade skrivit \"På rad 32 har han en for-loop\" varpå jag svarade att jag är en hon. Alltså jag är en tjej, inte kille. Smiley

-------------------------
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.
We are just an advanced breed of monkeys on a minor planet of a very average star.



Nissebosselasse 10:49 - 9:e Februari 2007 | Post #8
Medlem
Inlägg: 490


Skicka PM
Gött att det löste sig!

-------------------------
http://pushingcows.se
Gula Nallen



Smygis 13:09 - 9:e Februari 2007 | Post #9
Medlem
Inlägg: 90


Skicka PM
    Citat av Bookia:
JAG FICK DET ATT FUNKA. Smiley
Nu när jag läste Nissebosselasses kommentar igen förstod jag vad han menade.
Har nu ändrat koden till if(svar1/2=='J'||svar1/2=='j') och motsvarande på alla ställen och nu funkar hela programmet. Smiley
Det där att man måste göra skriva jämförelsen om två gånger var nytt för mig. Det står inte så (tydligt) i boken och det har inte nämnts på föreläsningarna. Men nu vet jag det. Smiley

Smygis:
Du hade skrivit "På rad 32 har han en for-loop" varpå jag svarade att jag är en hon. Alltså jag är en tjej, inte kille. Smiley


Gott. tyckte att det var mysko om du skulle missförstå oss så grovt.


Och Smiley (: h u h : ) ska tydligen vara en shokerad/förvånad smily. Vet inte varför den inte fungerade...

Blinkenligts: 97% fulkod och 2% tur Smiley

-------------------------
Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS!



Sidor: 1

Forum huvudsida -> Programmering -> if / else if satsen
Atom feed

Du får inte posta i den här tråden | Till toppen