Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 15:20

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



c++ Konsolenfehler (int & cin) + extra Frage

Discussion on c++ Konsolenfehler (int & cin) + extra Frage within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elemeNt_123's Avatar
 
elite*gold: 0
Join Date: Jul 2016
Posts: 96
Received Thanks: 6
c++ Konsolenfehler (int & cin) + extra Frage

Hi,

es ist 7 Uhr am morgen und ich wollte mir aus Langeweile mal ein Calculator für ein Spiel schreiben.

Im Spiel gibt es ein Buch Crafting System und man braucht für ein Stufe 2 Buch z.B zwei Stufe 1 Bücher. Das geht bis Stufe 4 nach demselben Prinzip.

Wenn ich mein Code compilen möchte, dann bekomme ich solche Fehlermeldungen :
Code:
main.cpp|18|error: cannot bind 'std::istream {aka std::basic_istream<char>}' lvalue to 'std::basic_istream<char>&&'
c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\istream|872|note: initializing argument 1 of 'std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = int [4]]'
main.cpp|19|error: switch quantity not an integer
main.cpp|20|error: the value of 'x' is not usable in a constant expression
Zu meinem Code :

Code:
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;

int main()
{
    int x; // IVer
    int y; // IIIer
    int z; // IIer
    int v; // Ier
    int book [] = {x, y, z, v};
    int anzahl;
    cout << "x =IV,   y = III,    z = II,    v = I";
    cin.get();
    system("cls");
    cout << "Hallo, welche Sorte von Bücher wollen Sie haben ? ";
    cin >> book;
   switch (book) {
 case x:
    cout << "Wie viele IVer wollen sie haben ? ";
    cin >> anzahl;
    cout << "Sie brauchen " << anzahl / 0.5 / 0.5 / 0.5 << "I Bücher" <<endl;
break;

    case y:
        cout << "Wie viele IIIer wollen sie haben ? "
        cin >> anzahl;
        cout << "Sie brauchen " << anzahl / 0.5 / 0.5 << "I Bücher " << endl;
break;
    case z:
        cout << "Wie viele IIer Bücher wollen sie haben ? "
        cin >> anzahl;
        cout << "Sie brauchen " << anzahl / 0.5 << "I Bücher" << endl;
break;
    default:
        cout << "Sie können das Programm schließen";
break;
    }
    system("PAUSE");
    return 0;
}
Ich vermute, dass das Problem mit dem Array zusammenhängt. Jedoch weiß ich selbst nicht genau, ob ich 4 intergers in einem reinpacken kann.

Wie man deutlich sieht, ist das Programm auch nicht sehr sinnvoll geschrieben. Ich würde gerne definieren, dass z.B int x = int y * 0.5 ist.
Aber dann weiß ich nicht, wie ich das nachher umsetzen soll. Mir fehlt da irgendwie die Idee. Oder falls ich nicht nur Stufe 4 Bücher, sondern auch noch Stufe 3 Bücher dazu craften möchte, dass das dann auch abgefragt wird. Wäre mit einer if Abfrage ja machbar, aber ich weiß nicht genau, wie ich dann von der einen case zur Anderen springe.

Hoffe mal, dass es verständlich ist, was ich meine.^^
elemeNt_123 is offline  
Old 08/16/2016, 17:42   #2
 
elite*gold: 0
Join Date: May 2015
Posts: 700
Received Thanks: 444
Eine int Variable speichert ja erst einmal nur irgendeine Ganzzahl. In deinem Code legst du vier solcher Variablen an:
Code:
    int x; // IVer
    int y; // IIIer
    int z; // IIer
    int v; // Ier
Jetzt hast du vier Speicherstellen - dort legst du aber keinen Wert ab, die Speicherstellen sind uninitialisiert. Bei C++ bedeutet das: Der Wert von x, y, z und v ist zufällig Werte.

Du möchtest aber, dass das bestimmte Werte sind. Also musst du das auch sagen, zum Beispiel so:
Code:
    int x = 4; // IVer
    int y = 3; // IIIer
    int z = 2; // IIer
    int v = 1; // Ier
Jetzt sind die Variablen mit einem jeweiligen Wert initialisiert.

Nun möchtest du, dass der Benutzer sich einen der Werte auswählt. Dazu brauchst du kein Array, sondern einfach wieder eine int Variable, deren Wert durch das cin >> duch den Benutzer festgelegt wird:
Code:
int book; 
    cin >> book;
Egal welche Zahl der Benutzer nun eingibt, book speichert den Wert nun.

Jetzt kannst du dein switch so machen, wie du es schon hast. Im default Zeig hat der Benutzer einen Wert eingegeben, der weder dem von x, y, z noch v entspricht (also weder 1, 2, 3 oder 4).

Eigentlich brauchst du die Variablen x, y, z und v eigentlich gar nicht, sondern könntest auch einfach schreiben:
Code:
int book;
cin >> book;
switch (book) {
    case 1: ... break;
    case 2: ... break;
    ....
}
Von einem case kannst du nicht so einfach in einen anderen springen. Du kannst nur von einem case in den nächsten "weiterrutschen", indem du das break weglässt. Also zum Beispiel so:
Code:
switch (condition) {
    case first_case: 
      // do stuff
    case second_case:
      // do other stuff
      break;
    case third_case:
      // and so on 
      break; 
}
Trifft first_case zu, wird first_case und second_case ausgeführt. Trifft second_case zu, nur second_case (wegen dem break).
algernong is offline  
Thanks
1 User
Old 08/16/2016, 18:21   #3
 
elemeNt_123's Avatar
 
elite*gold: 0
Join Date: Jul 2016
Posts: 96
Received Thanks: 6
Danke. !!

Das mit case wusste ich noch gar nicht ^^

edit : und ja stimmt, x, y, z, v brauch ich echt nicht. ^^ Hatte eig. einen anderen Weg im Kopf, und hab gedacht, dass ich die Variablen dafür brauchen könnte.
elemeNt_123 is offline  
Old 09/17/2016, 19:07   #4
 
elite*gold: 0
Join Date: Sep 2016
Posts: 25
Received Thanks: 25
`case` funktioniert nur mit konstanten Ausdrücken.
Variablen, die im Stapel reserviert wurden, haben immer einen undefinierten Wert.
Das bedeutet, dass der Compiler den Wert nicht deduzieren kann und es ist demnach auch kein konstanter Ausdruck.
vaynz is offline  
Old 09/18/2016, 11:12   #5
 
elite*gold: 0
Join Date: Sep 2016
Posts: 1
Received Thanks: 10
Quote:
Originally Posted by vaynz View Post
`case` funktioniert nur mit konstanten Ausdrücken.
Variablen, die im Stapel reserviert wurden, haben immer einen undefinierten Wert.
Das bedeutet, dass der Compiler den Wert nicht deduzieren kann und es ist demnach auch kein konstanter Ausdruck.
was meinst du mit "stapel"?
stack oder array?

falls du stack meinst: "normale" variablen werden so oder so im stack gespeichert

falls du array meinst:

Code:
#include "stdafx.h"
#include <iostream>


int main()
{
	int a[] = { 0,1,2,3,4,5 };

	switch (a[4]) {
	case 4:
		std::cout << "yo" << std::endl;
		break;
	case 5:
	case 3:
	case 2:
	case 1:
	default:
		std::cout << "no" << std::endl;
	}

	return 0;
}
was soll daran nicht funktionieren?
Remix v168 is offline  
Old 09/18/2016, 11:31   #6


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
Mit "Stapel" war sicher der Stack gemeint (ist allerdings auf sämtliche Laufzeitvariablen zutreffend). Und was @ meinte, war nicht, dass der Ausdruckt im switch konstant sein muss, sondern in den Cases.
Er meinte, dass Folgendes nicht funktionieren würde:
Code:
int one = 1, two = 2, three = 4;
switch (someuserinput)
{
case one:
  // ...
  break;
case two:
  // ...
  break;
case three:
  // ...
  break;
default:
  // ...
}
Mit freundlichen Grüßen
Jeoni
Jeoni is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
[Frage]Extra Rüssis
05/15/2014 - Metin2 Private Server - 6 Replies
Moin, Jeder sollte doch diese Extra Rüssis kennen. Also "Ausdauer" "Gute Ausdauer" "Geschmeidigkeit" "Ausdauer anderer Feinde". Mir fehlen in den xGr33n Files sämtliche Texturen. Ich habe bestimmt ne halbe stunde gegooglt aber nix gefunden wo zb die Texturen drinne sind. Ich weiß Dateianfragen sind verboten, aber wie bitte soll ich anders an die vermeindlichen Standartrüssis entbuggt ran kommen... :/ Sorry dafür. Wäre nett wenn mir jmd helfen könnte. MFG
Elo Boosting - Extra Safe MoneyBack Guarantee. 100% + An Extra 10% Paid Back To You
06/28/2013 - League of Legends Trading - 0 Replies
Blank Thread - Thread Design Test
[Frage] Window Option Extra
01/25/2013 - Flyff Private Server - 6 Replies
Hallo FlyFF PServer Community, Ich wollte mal frage was eigentlich das Window Option Extra bingt. Hier mal die d3dapp.cpp . #ifdef __WINDOW_OPTION_EXTRA m_dwWindowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_VISIBLE; #else
Frage zu Extra Hitpoints
10/26/2011 - DarkOrbit - 6 Replies
Also ich habe jetzt eine Veng und habe 360000/230000 Hitpoints. Wenn uch mir nen Goli kaufe hat der dann einfach 306000 Hitpoints oder auch Extra Hitpoints? (Pilot Sheet auf Hitpoints auf gebaut) Danke im Vorraus Mfg, Sgt.Newerth*
Frage wegen Extra Source Verschlüssler
02/21/2011 - Metin2 Private Server - 0 Replies
Da bisher mir niemand geantwortet aht in diesem thread http://www.elitepvpers.com/forum/metin2-pserver-gui des-strategies/1025188-relase-verschl-sselungs-key -ndern-3.html Und ich es gerade sehr dringend brauche frage ich hier noch einmal nach "Vielleicht jetzt eine doof Frage aber woran erkenne ich wann er mit dem Verschlüsseln fertig ist?xD, weil... 1. Ich warte schon ca 5min 2. Ist ein leeres Fenster 3. es schließt sich nicht von selbst 4. Es kommt keine Meldung,dass es fertig ist.."



All times are GMT +1. The time now is 15:24.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.