Permalänk
Medlem

c++ problem

Är nybörjare när det gäller c++ och har gått ett litet problem. Vill att när jag skriver in string ett/två så ska den skriva "blev 1" men när jag skriver något annat så ska den inte göra det. Kommer ej på varför den gör som den gör. Tack på förhand

Detta är ett exempel

#include<iostream> using namespace std; string test1; void test() { cin >> test1; if (test1 == "ett" || "två") { cout << "blev 1"; } else { cout << "hahaah"; } } int main() { test(); return 0; }

Detta ger "blev 1" vad jag än skriver in :S

Permalänk

if(test1 == "ett" || test1 == "två")

Permalänk
Medlem

Du har glömt att kolla i om test1 är lika med "två"

if (test1 == "ett" || test1 == "två")

Du borde ej ha test1 som en global variabel.

Visa signatur

Main dator: i5 750 4Ghz, GTX 770 4GB, Intel SSD 80GB, 8GB Ram
Servern: Core 2 Duo, 4GB Ram, 4x2TB Lagring, Ubuntu Server 12.04

Permalänk
Medlem

Oj Tackar! Vad är anledningen att jag ej bör ha det som en global variabel?
Funkade mycket bättre när jag skrev in test1 == "tv\x86 (å) men lade till test1 och == igen

Tackar för hjälpen om någon vill få de som sagt säga varför jag ej bör använda en global variabel! som sagt är jag ny och har ej så mycket förståelse för sånt här än.

MvH isark2

Permalänk
Medlem
Skrivet av isark2:

Oj Tackar! Vad är anledningen att jag ej bör ha det som en global variabel?
Funkade mycket bättre när jag skrev in test1 == "tv\x86 (å) men lade till test1 och == igen

Tackar för hjälpen om någon vill få de som sagt säga varför jag ej bör använda en global variabel! som sagt är jag ny och har ej så mycket förståelse för sånt här än.

MvH isark2

Enkelt förklarat bör du inte använda en global variabel då den kan användas i fler funktioner vilket enkelt kan leda till att du av misstag ändrar den i en funktion (eller koden såklart ändrar den i en), som sedan förstör i en annan. Har även med små prestanda skillnader, iaf i Script-språk som JavaScript (vet inte hur det funkari C++) då interpretatorn först försöker hitta en variabel i funktionen och sedan går "utåt".

Visa signatur

Neon
Citera mig om du vill ha svar!

Permalänk

Håller med. Det är väldigt lätt hänt att man skriver felaktig kod när man använder globala variabler. De är bra att använda när man t.ex. vill göra konstanter. Fast då brukar man skriva const framför så att de inte går att ändra variabelns värde på ett lätt sätt. I fallet med din kod så är det absolut inte ens nödvändigt. Där är det bättre att skapa variabeln i scopet där std::cin anropas. d.v.s. i själva funktionen.

När jag vill göra lokala konstanter i en .cpp fil så brukar jag använda mig av annonymt namespace så slipper man deklarera konstanten static.

namespace { const double g_Pi = 3.14; }

Så din kod skulle kunna skrivas såhär:

#include<iostream> void test() { std::string test1; std::cin >> test1; if ((test1 == "ett") || (test1 == "två")) { std::cout << "blev 1"; } else { std::cout << "hahaah"; } } int main() { test(); return 0; }