Sida 1 av 2

Använda två IF i en rad?

Postat: 16 maj 2018, 16:08:28
av fosfor
Hej!

Om jag vill att två IF's ska vara sanna för att gå vidare.
Hur ser en sådan rad ut?
Räcker det med ett + tecken

Typ

Kod: Markera allt

  {
  if ( blabla1 + bleble2 )
    {
Jag vill att en integer ska vara true och att en positionering ska vara inom ett visst värde, för att den sen ska gå vidare till handling.

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 16:10:31
av Icecap
if(Villkor1 && Villkor2)

&& betyder "logisk AND" medan & betyder "bitmässigt AND".

I ovanstående betyder det att om BÅDA Villkor1 OCH Villkor2 är sanna utförs det som står efter in-satsen.

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 16:13:28
av fosfor
Ah ok perfekt, tack

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 16:16:18
av fosfor
Icecap:
Vad skulle du säga är mest praktiska sättet att göra en "virtuell switch på"?

Jag vill bara ha något som antingen är "true" eller "false" (men som kan byta emellan true eller false, så den ska inte vara fast).
Det är inte integer va?

Den ska ändras beroende på vad jag gjort och tryckt på för knappar. Så att den kan veta vad att göra och inte göra.

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 16:22:11
av adent
+ är fel tecken. En if-sats tolkar allt som är skiljt från 0 som sant.

if(0) -> falskt
if(1) -> sant
if(2) -> sant
if(45 +33) -> sant
if(45 - 45) -> falskt.

Men strunt i det ovan. Så här gör man:

Kod: Markera allt

if(a > 3 && b < 4)
-> sant om a är större än 3 OCH b är mindre än 4.

Jag föredrar att skriva raden ovan såhär för att undvika missar p.g.a. operatorprioritet:

Kod: Markera allt

if((a > 3) && (b < 4))
-> sant om a är större än 3 OCH b är mindre än 4.

Du kan också skriva såhär:

Kod: Markera allt

if(a > 3)
{ 
  if(b <4)
  {
     // Här hamnar vi bara om a är större än 3 OCH b är mindre än 4.
  }
}
Om det räcker att ett av villkoren är sant så kör med || istället för &&.

|| ska i detta fall utläsas som "eller" och && som "och".

Det jag sa om att 0 är falskt och 1 är sant i en ifsats kan man faktiskt se enkelt med t.ex. följande kod:

Kod: Markera allt

int a = 3;

printf("a större än 3: %d\n", (a>3) );
printf("a mindre än 3: %d\n", (a<3) );
Koden ovan kommer skriva ut 0 och 0 på varsin rad för att uttrycket (a>3) returnerar 0 -> falskt.
uttrycket (a<3) kommer också returnera 0 -> falskt. Prova att ändra den första tre:an och se det bli 1 ibland :)

Sedan kan du testa nedanstående kod också :)

Kod: Markera allt

printf("0 && 0: %d\n", (0 && 0) );
printf("0 && 1: %d\n", (0 && 1) );
printf("1 && 0: %d\n", (1 && 0) );
printf("1 && 1: %d\n", (1 && 1) );


Re: Använda två IF i en rad?

Postat: 16 maj 2018, 16:30:57
av fosfor
adent:
Ok strålande, det klargjorde ett och annat!

Men om jag vill ha en "virtuell" knapp/switch också till detta?
Jag kan ju skriva t.ex. int intest1Pin = 4;
och den läser då av knappen jag har inkopplad dit som antingen true eller false.

MEN om jag bara vill ha en liten "del" i koden som antingen är true eller false, som kan ändras av koden i loopen,
hur gör jag det smidigast? Typ att om jag gör vissa saker så ställts den om till true, och om jag göra lite andra saker så ställs den om till false.
Och att den håller kvar vid vad den är tills att något ändrar på den. Hur gör jag det smidigast?

Detta är till för att hindra vissa delar av koden göra vissa saker beroende på vad jag gjort innan.

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 17:16:45
av sodjan
C har inga "bool" variabler (alltså variabler som enbart har två
giltiga värden "true" och "false"). Många andra språk har det.
Man använder helt enkelt den minsta tillgängliga integern, normalt
en 8-bitars byte genom en "char" och sedan låter man den få värdet
0 eller 1. Normalt finns det fördefinierade symboler med namn som
True, TRUE, False, FALSE eller liknande som har rätt värde. Alltså
istället för att hårdkoda 1 eller 0 i koden...

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 17:57:30
av mankan
I C99 finns bool.

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 18:46:45
av sodjan
Ah, där ser man... För modernt för mig... :-)

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 21:11:34
av hawkan
Men fosfor, många av dina frågor har inte med mikroprocessorer att göra speciellt. Utan helt enkelt med språket C att göra.
Det är inte så att du tror du skulle vinna på att ta dej igenom några kapitel i nån kurs om det är på youtube, bok, eller vad som helst?

Misstolka inte för vi tycker det är jättekul att hjälpa dej. Men med lite mer kunskap i C kan det gå fortare fram för dej.
Vi ser ju att du har ett intresse och har intressanta problem.

Re: Använda två IF i en rad?

Postat: 16 maj 2018, 23:46:37
av TomasL
Hmm, jag skulle nog gjort en enum för tangentkombinationerna, och sedan använt en switch-sats.
Blir faktiskt väldigt mycket tydligare än en härrans massa if-satser
Om man i enumen tilldelar värden, så kan man ändra standard-värdena
till exempel typedef enum { none = 0xFF, upp = 0x01, ned 0x02, left = 0x10, right = 0x20} keyb_enum;

Kod: Markera allt

typedef enum { none, upp, ned, left, right} keyb_enum;
/* 
none = 0
upp = 1
ned = 2
left = 3
right = 4
*/

keyb_enum keyboard_e = none;


switch (keyboard_e)
{
    case none
          break;

    case upp:
          …………;
         ………….;
          break;

   case ned:
          …………;
         ………….;
          break;

   case right:
          …………;
         ………….;
          break;

   case left:
          …………;
         ………….;
          break;

    default:
          // vi har ett jättefel
}
 

Re: Använda två IF i en rad?

Postat: 17 maj 2018, 00:11:12
av lillahuset
Ett tips är att skriva program helt på engelska, man vet aldrig om det kommer att underhällas av en skandinav i framtiden.
Jag har underhållit program på blandad tyska och engelska, tröttsamt men någorlunda OK.
Jag har underhållit program på blandad rumänska och engelska, tack Manni DeGeer för att du lärde mig tillräckligt med franska för att hjälpligt kunna tolka rumänskan. Annars hade jag gett upp.
Jag har underhållit program på blandad ungerska och engelska, jävligt jobbigt. Någonstans ligger det ett ungerskt-engelskt-ungerst lexikon. Fy f-n för programmerare som absolut ska använda sitt modersmål i program.

Re: Använda två IF i en rad?

Postat: 17 maj 2018, 00:15:23
av TomasL
Jag vet, tyvärr blir det svengelska ibland.
Å andra sidan, så eftersom vi är svenskar och bor i Sverige så tycker jag att det svenska språket skall användas.
Vi får väl se till att enbart anställa svensktalande utvecklare i framtiden, dock åäö är lite svåra i ren kod, konstigheter kan hända.
Vi får ta fram en svensk version av GCC

Re: Använda två IF i en rad?

Postat: 17 maj 2018, 00:27:52
av lillahuset
Kod har en tendens att migrera. Och drabba oskyldiga utvecklare. :(

Re: Använda två IF i en rad?

Postat: 17 maj 2018, 00:34:10
av TomasL
Jo jag vet, ytterligare en anledning att lära sig nya språk.