Permalänk

kört fast i C

En if-sats med två olika operationer och utdata,

double netto, brutto; printf("Ange bruttoinkomst> "); scanf("%1lf", &brutto); if (brutto <= 204000) netto = brutto - brutto * 0.3; */ Om bruttoinkomsten är mindre än 204000 ska denna operation utföras printf("Din nettoinkomst är %f\n", netto); */ Och det här ska skrivas ut else netto = brutto - (204000 * 0.3 + (brutto - 204000) * 0.5); */ Annars görs den här operationen printf("Din nettoinkomst är %f\n", netto); */ och det här skrivs ut return(0);

Men den klagar på att jag har "else" utan en if-sats.

Permalänk
Medlem

Du har glömt använda { }

Permalänk

@Undie:

Har slutit hela koden med måsvingar i originalkoden, glömde bara lägga till de här. MEnar du att jag ska sluta if-satsen med måsvingar också?

#include <stdio.h> int main()

har jag också i koden

Permalänk
Medlem

@Urine Greyjoy:

if ( ) { } else { }

Skriv alltid dina satser på detta sätt så slipper du dessa fel, plus att din kod blir mer lättläst.

En if-sats utan måsvingar kommer läsa den nästkommande operationen men inte mer, i det här fallet har du två operationer, varpå else-satsen tappar bort sig.

Visa signatur

FD Define Mini C | ASRock Z97E-ITX | Intel i7 4790k | Asus STRIX GTX 1070Ti OC
Adata 16GB 1600MHz | Samsung 850 Evo 500GB | OCZ 240GB | EVGA G2 650W
Huawei Honor8 | Lenovo Y14ISK

Permalänk
Medlem

Eftersom de trevliga herrarna ovan löst problemet åt dig kan jag bara inflika att det också är värt att lära sig från början att undvika en fast siffra i ifsatsens villkor. Skapar du en konstant ovanför som heter nåt i stil med lowerSalaryLimit och assignar den till värdet 204000 och gör detta för alla siffror kommer koden bli mer lättunderhållen och framförallt mer lättläst

Visa signatur

8700K 5Ghz | 32GB 3200Mhz | 2080Ti 11GB | Phanteks Enthoo | Asus PG27AQ

Permalänk
Legendarisk

@Urine Greyjoy: IF och ELSE kommer bara köra nästa "statement" (eller "rad" i det här fallet) såvida du inte omger hela den grupp du vill ska köras med måsvingar, och formar ett så kallat "block" (som du måste göra med funktionsdefinitioner). I din kod har du skrivit:

1: if (brutto <= 204000) Om brutto <= 204000 ... 2: netto = brutto - brutto * 0.3; ... tilldela resultatet av beräkningen till netto 3: printf("Din nettoinkomst är %f\n", netto); ... det här ska köras oavsett vad brutto var 4: else ... och här blir det fel eftersom att din IF ser ut att vara avslutad 5: netto = brutto - (204000 * 0.3 + ... ... <samma problem som rad 2-3> 6: printf("Din nettoinkomst är %f\n", netto); ...

Istället bör du skriva på det här sättet (notera hur indragen gör det lättare att se hur programmet hänger samman):

if (brutto <= 204000) { netto = brutto - brutto * 0.3; printf("Din nettoinkomst är %f\n", netto); } else { netto = brutto - (204000 * 0.3 + (brutto - 204000) * 0.5); printf("Din nettoinkomst är %f\n", netto); }


Sedan har du blandat ihop två olika sätt att skriva kommentarer. För att kommentera enstaka rader kan man använda sig av //, och för att kommentera längre stycken kan man omge koden med /* ... */. Du har råkat använda */ i ditt exempel, vilket alltså bara ser ut att avsluta en kommentar som aldrig påbörjats, eller ett multiplikationstecken omedelbart följt av ett divisionstecken, och det kommer orsaka ett fel.

// En kommentar på en rad int i = 1; /* En kommentar som sträcker sig över flera rader på samma gång */ int n = 2;

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Biberu:

// En kommentar på en rad int i = 1; /* En kommentar som sträcker sig över flera rader på samma gång */ int n = 2;

Fast nu har du deklarerat variabeln 'i' två gånger

int i = 1; i = 2;

Permalänk
Legendarisk

@Undie: Den andra heter n.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Biberu:

@Undie: Den andra heter n.

Nehe du nu gick du in o ändrade i smyg

Permalänk
Legendarisk

@Undie: Pfft, vilka anklagelser, ska jag göra det så måste jag fula bort loggraderna för både mitt och ditt inlägg manuellt i databasen. Det orkar jag inte på en söndag.

Visa signatur

Abstractions all the way down.