Permalänk
Medlem

Vad gör jag fel? (c++ kod)

Hej, jag håller på att försöka lära mig själv c++, vilket kan vara lite krångligt, då jag inte fattar något, och jag inte har någon att fråga om hjälp. Iallfall tänkte jag göra et konsoll-program som säger till om man skriver talet 5 (jag vet väldigt simpelt, men jag har inte hållt på så länge) men jag kan inte få den att funka då den säger att man gissar på rätt tal hela tiden, även om man inte gör det. Lite hjälp skulle uppskattas mycket.

#include <iostream> using namespace std; int main(){ int number; cout << "Gissa vilket nummer jag tänker på" << endl; cin >> number; if (number = 5){ cout << "Du gissade rätt" << endl; } else if(number < 5){ cout << "Du gissade för lite" << endl; } else{ cout << "Du gissade för mycket" << endl; } }

Permalänk
Medlem

Nu var det ungefär tjugo år sedan jag höll på med C/C++ och jag kanske minns fel, men kanske är det jämförelseoperatorn som är felskriven. Testa == istället för = på raden där det står (if (number = 5)
=5 betyder tilldelning, == jämför.

Permalänk
Medlem
Skrivet av chrisx71:

Nu var det ungefär tjugo år sedan jag höll på med C/C++ och jag kanske minns fel, men kanske är det jämförelseoperatorn som är felskriven. Testa == istället för = på raden där det står (if (number = 5)
=5 betyder tilldelning, == jämför.

Ja, tackar!

Permalänk
Medlem

Borde inte kompilatorn klagat på detta?

Visa signatur

Burk Nr.1 : Asus P8Z68 V-Pro | i7 2600k @ 4,4 | EVGA GTX780 Classified | Corsair Vengeance 8GB DDR3 1600Mhz | Corsair Obsidian 650D | Corsair TX650M | Corsair H100

Burk Nr.2 : MSI P35 Neo2 | Core 2 Duo E6850 @ 3,2Ghz | Powercolor Radeon HD5850 1GB | Corsiar Twin2X 6400 2x2GB | Corsair 550W

Permalänk
Inaktiv
Skrivet av miFFhoe:

Borde inte kompilatorn klagat på detta?

Nej, då du kan till dela värden i en if stats..

t.ex. i php om du läser från databasen:
while($row = mysql_fetch_assoc($query)){
//Do something
}

Så länge du får ett värde tillbaka kör loopen. Fungerar precis lika med if satsen.

Permalänk
Medlem

Ser att du redan fått hjälp, men tänkte försöka förklara det här lite mer nogrant om jag lyckas. Jag har inte pysslat med detta på ett bra tag, så rätta mig om jag har fel någon. Notera att jag är sämst på att beskriva saker.

= är en tilldelnings operatör och andvänds när du tlildelar ett värde till en variabel. Jag TROR att den inte andvänds till annat än att ge variabler ett värde.

== är en jämfördelseoperatör och andvänds där du i det här fallet har skrivit "(number = 5)", har för mig det heter villkorssatser, istället för att göra en jämförelse så ger du din variabel värdet 5, så oavsätt vad du matar in så ändras "number" till 5 när ditt program når if-satsen och if-satsen kommer alltid bli true och else satserna alltid falska.

Alla jämförelseoperatörer:
< Mindre än
> Större än
<= Mindre än eller lika med
>= Större än eller lika med
== Lika med
!= Inte lika med
&& Och
|| Eller
! Icke

Visa signatur

Windows användare sedan 1991. Numera MacBook Pro M1 Pro.

Permalänk
Datavetare
Skrivet av miFFhoe:

Borde inte kompilatorn klagat på detta?

Beror på kompilator och switchar till den. Precis som ckrudelux påpekat så är det postade programmet faktiskt giltig C++.

Men g++ klagar på detta om man har med "-Wall", något man alltid bör ha.

g++ -Wall swec.cpp swec.cpp: In function ‘int main()’: swec.cpp:10: warning: suggest parentheses around assignment used as truth value

g++ tycker att om du verkligen vill ha en tilldelning inuti ett test så skriv så här

if ((number = 5) != 0){

även detta accepteras

if ((number = 5)){

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer