Buggfix Plus
Aktuellt datum och tid: 18.10 2018-10-21

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 16 inlägg ]  Gå till sida 1, 2  Nästa
Författare Meddelande
 Inläggsrubrik: Använda två IF i en rad?
InläggPostat: 15.08 2018-05-16 
Användarvisningsbild

Blev medlem: 05.43 2013-02-13
Inlägg: 197
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
  {
  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.


Upp
 Profil  
 
InläggPostat: 15.10 2018-05-16 
Användarvisningsbild

Blev medlem: 14.52 2005-01-10
Inlägg: 23141
Ort: Kristinehamn
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.


Upp
 Profil  
 
InläggPostat: 15.13 2018-05-16 
Användarvisningsbild

Blev medlem: 05.43 2013-02-13
Inlägg: 197
Ah ok perfekt, tack


Upp
 Profil  
 
InläggPostat: 15.16 2018-05-16 
Användarvisningsbild

Blev medlem: 05.43 2013-02-13
Inlägg: 197
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.


Upp
 Profil  
 
InläggPostat: 15.22 2018-05-16 
Användarvisningsbild

Blev medlem: 22.56 2008-11-27
Inlägg: 3107
Ort: Utanför Jönköping
+ ä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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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) );



Upp
 Profil  
 
InläggPostat: 15.30 2018-05-16 
Användarvisningsbild

Blev medlem: 05.43 2013-02-13
Inlägg: 197
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.


Upp
 Profil  
 
InläggPostat: 16.16 2018-05-16 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 36833
Ort: Söderköping
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...


Upp
 Profil  
 
InläggPostat: 16.57 2018-05-16 

Blev medlem: 10.23 2015-07-18
Inlägg: 259
Ort: Linköping
I C99 finns bool.


Upp
 Profil  
 
InläggPostat: 17.46 2018-05-16 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 36833
Ort: Söderköping
Ah, där ser man... För modernt för mig... :-)


Upp
 Profil  
 
InläggPostat: 20.11 2018-05-16 
Användarvisningsbild

Blev medlem: 09.27 2011-08-14
Inlägg: 1146
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.


Upp
 Profil  
 
InläggPostat: 22.46 2018-05-16 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 30160
Ort: Borås
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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
}
 


Upp
 Profil  
 
InläggPostat: 23.11 2018-05-16 
Användarvisningsbild

Blev medlem: 07.13 2008-07-03
Inlägg: 13254
Ort: Norrköping
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.


Upp
 Profil  
 
InläggPostat: 23.15 2018-05-16 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 30160
Ort: Borås
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


Upp
 Profil  
 
InläggPostat: 23.27 2018-05-16 
Användarvisningsbild

Blev medlem: 07.13 2008-07-03
Inlägg: 13254
Ort: Norrköping
Kod har en tendens att migrera. Och drabba oskyldiga utvecklare. :(


Upp
 Profil  
 
InläggPostat: 23.34 2018-05-16 
EF Sponsor
Användarvisningsbild

Blev medlem: 22.54 2006-09-23
Inlägg: 30160
Ort: Borås
Jo jag vet, ytterligare en anledning att lära sig nya språk.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 16 inlägg ]  Gå till sida 1, 2  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010