[C++] Char und (x) * char Hilfe benötigt!



  • Hallo und zwar mach ich seit 4 Tagen eine Ausbildung , und wollte hier im Forum die "Profis" nachfragen ob sie mir villeicht Helfen könnten..
    Von meinem Chef habe ich folgende Aufgabe bekommen;

    " Der Benutzer gibt ein Buchstaben ein a,b,c oder d "
    a = Multiplikation
    b= Addition
    c= Subtraktion
    d= Division
    Der Benutzer soll 2 Zahlen eingeben
    = Ergebniss
    

    Es ist sehr Wichtig , hab allerdings schon etwa 2 Stunden drangehuckt , und komme einfach nicht weiter ..
    Hier mal mein " Kunstwerk":

    // egal.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream.h>
    #include <iomanip.h>
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream.h>
    #include <conio.h>
    
    int main(int argc, char* argv[])
    {
    		// Deklaration i,b vom Datentyp int. Initialisierung mit dem wert 0.
    
    	char a = 'a' , b = 'b', c = 'c', d = 'd';
    
    	cout << "Hallo bitte geben Sie Buchstaben von A bis D ein:\n";
    
    	cin >> a;
    
    	if (a==a)		
    	{
    		cout << "Sie haben die Buchstabe a eingegeben.";
    	}
    
    	if (a==b)		
    	{
    		cout << "Sie haben die Buchstabe b eingegeben.";
    	}
    
    	if (a==c)		
    	{
    		cout << "Sie haben die Buchstabe c eingegeben.";
    	}
    
    	if (a==d)	
    	{
    		cout << "Sie haben die Buchstabe d eingegeben";
    	}
    
    	int zahl;
    
    	cout << "Bitte geben sie 2 Zahlen ein:!\n";
    
    	cin >> zahl;
    
    	//if ()
    
    	//{}
    
    	// Programm läuft einwandfrei , es gibt daher 0 zurück.
    	return 0;
    

    Danke an alle.



  • Ist ja nett, dass du es nochmals versuchst, immerhin ist schon der Titel besser. 🙂

    Aber die konkrete Frage fehlt leider nach wie vor. Vielleicht hilft es deinem Problem allerdings, wenn du für die Eingabe eine andere Variable als a nimmst, die ist nämlich schon besetzt und somit überschreibst du sie.

    P.S. Nimm statt der [code]-Tags lieber die [cpp]-Tags (erste Schaltfläche), das macht den ganzen Code noch farbig. 😉



  • Du weist a zuerst 'a' zu, aber überschreibst es dann mit der Benutzereingabe.
    Daher: eigene Variable, z.B. char eingabe; und dann if (eingabe==a).
    a, b, c und d sind aber eigentlich überflüssig, weil du ja auch gleich if (eingabe=='a') schreiben kannst.



  • HeHe 😛 also naya , die Frage lautet ja , wie kann es den weiter gehen , hab schon nachgelesen das ich char net mit == vergleichen kann ..



  • Danke euch sehr für die schnellen Antworten
    Hab jetzt 1 Fehler , der Code sieht so aus

    // Deklaration i,b vom Datentyp int. Initialisierung mit dem wert 0.
    
    	char eingabe;
    
    	cout << "Hallo bitte geben Sie Buchstaben von A bis D ein:\n";
    
    	cin >> eingabe;
    
    	if (eingabe==a)		
    	{
    		cout << "Sie haben die Buchstabe a eingegeben.";
    	}
    
    C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test1.cpp(27) : error C2065: 'a' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.
    


  • Gracjan schrieb:

    HeHe 😛 also naya , die Frage lautet ja , wie kann es den weiter gehen , hab schon nachgelesen das ich char net mit == vergleichen kann ..

    Doch, kannst du. Was du wahrscheinlich meinst, sind char-Strings, welche man mit strcmp vergleichen muss. Du hast aber lediglich ein einziges Zeichen, das kannst du sehr wohl mit == vergleichen.
    char-Strings sind übrigens C und werden in C++ ohne guten Grund nicht verwendet, dafür gibt es std::string. strings kannst du ebenfalls problemlos mit == vergleichen.

    Außerdem brauchst du nur zwei Header:
    #include <iostream>
    #include <cstdlib>

    Die anderen haben da nichts zu suchen. iostream.h gibt es seit gut 11 Jahren nicht mehr, bzw. gab es noch nie, wenn man die Zeit vor dem ersten C++-Standard nicht berücksichtigt. Einen halbwegs aktuellen C++-Compiler zu benutzen, der sowas nicht mehr zulässt, wäre durchaus empfehlenswert.

    Edit: die Fehlermeldung sollte dir schon alles sagen. Du hast keine Variable a deklariert, also kannst du sie auch nicht verwenden. Wenn du mit dem Zeichen a vergleichen willst, muss es 'a' lauten.



  • a ist für den Compiler ein Symbol, u.a. für eine Variable. Dieses Symbol hast du nirgends, z.B. mit char a; , definiert. Du willst die Variable eingabe mit einem Char-Literal vergleichen. Diese Literale schreibst du innerhalb von single quotes:

    if(eingabe == 'a')
    


  • Ok mit dem Lesen von den Buchstaben hats geklapt , wenn ich jetzt a eintippe sagt der mir das ich die buchstabe A eingetippt habe, wie kann ich den jetzt machen das die buchstabe A Multiplikation sein soll ? und das dann mit den 2 Zahlen multipliziert die der Benutzer eingibt ?



  • Gracjan schrieb:

    Ok mit dem Lesen von den Buchstaben hats geklapt , wenn ich jetzt a eintippe sagt der mir das ich die buchstabe A eingetippt habe, wie kann ich den jetzt machen das die buchstabe A Multiplikation sein soll ? und das dann mit den 2 Zahlen multipliziert die der Benutzer eingibt ?

    Versteh nicht ganz, wo es da Probleme gibt, da du if ja anzuwenden weisst.

    if (eingabe=='a')       
    {
       cout << "Sie haben den Buchstaben a eingegeben. ";
       cout << zahl1*zahl2 << endl;
    }
    

    Macht natürlich Sinn, das ganze erst nach dem Einlesen der beiden Zahlen zu machen...



  • Mein Code sieht jetzt so aus

    int main(int argc, char* argv[])
    
    {
            // Deklaration i,b vom Datentyp int. Initialisierung mit dem wert 0.
    
        char eingabe;
    
        cout << "Hallo bitte geben Sie Buchstaben von A bis D ein:\n";
    
        cin >> eingabe;
    
        if (eingabe == 'a' )  
    
        {
            cout << "Sie haben die Buchstabe a eingegeben.";
    
        }
    
    	if (eingabe == 'b' )  
    
        {
    		cout << "Sie haben die Buchstabe b eingegeben.";
    
        }    
    
    	if (eingabe == 'c' ) 
    
        {
            cout << "Sie haben die Buchstabe c eingegeben.";
    	}
    
        if (eingabe == 'd' )   
    
        {
            cout << "Sie haben die Buchstabe d eingegeben.";
        }
    
    	    int zahl;;
    
        cout << "Hallo bitte geben Sie 2 Zahlen ein:\n";
    
        cin >> zahl;
    
    	// Programm läuft einwandfrei , es gibt daher 0 zurück.
    	return 0;
    
    }
    


  • Okey, habe mir jetzt Registriert damit ich die Posts Editieren kann..

    // egal.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
    //
    #include "stdafx.h"
    #include <iostream.h>
    #include <iomanip.h>
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream.h>
    #include <conio.h> 
    
    int main(int argc, char* argv[])
    
    {
            // Deklaration i,b vom Datentyp int. Initialisierung mit dem wert 0.
    
        char eingabe;
    
        cout << "Hallo bitte geben Sie Buchstaben von A bis D ein:\n";
    
        cin >> eingabe;
    
        if (eingabe == 'a' )  
    
        {
            cout << "Sie haben die Buchstabe a eingegeben.";
    		cout << zahl1*zahl2 << endl; 
    
        }
    
    	if (eingabe == 'b' )  
    
        {
    		cout << "Sie haben die Buchstabe b eingegeben.";
    		cout << zahl1+zahl2 << endl; 
        }    
    
    	if (eingabe == 'c' ) 
    
        {
            cout << "Sie haben die Buchstabe c eingegeben.";
    		cout << zahl1-zahl2 << endl; 
    	}
    
        if (eingabe == 'd' )   
    
        {
            cout << "Sie haben die Buchstabe d eingegeben.";
    		cout << zahl1/zahl2 << endl; 
        }
    
    	    int zahl;;
    
        cout << "Hallo bitte geben Sie 2 Zahlen ein:\n";
    
        cin >> zahl;
    
    	// Programm läuft einwandfrei , es gibt daher 0 zurück.
    	return 0;
    
    }
    

    @Edit
    bekomme am ende ein Error

    C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test1.cpp(64) : fatal error C1004: Unerwartetes Dateiende gefunden
    Fehler beim Ausführen von cl.exe.
    

    die letzte >Zeile



  • // egal.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
    //
    #include "stdafx.h"
    #include <iostream.h>
    #include <iomanip.h>
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream.h>
    #include <conio.h>
    

    Reduziere das auf

    #include <iostream>

    <iostream.h> gibt es nicht mehr (schlechter Stil) und die anderen Inclusions sind total sinnfrei, mit Ausnahme von "stdafx.h"

    if (eingabe == 'a' )  
    
        {
            cout << "Sie haben die Buchstabe a eingegeben.";
            cout << zahl1*zahl2 << endl;
    
        }
    
        if (eingabe == 'b' )  
    
        {
            cout << "Sie haben die Buchstabe b eingegeben.";
            cout << zahl1+zahl2 << endl;
        }    
    
        if (eingabe == 'c' )
    
        {
            cout << "Sie haben die Buchstabe c eingegeben.";
            cout << zahl1-zahl2 << endl;
        }
    
        if (eingabe == 'd' )  
    
        {
            cout << "Sie haben die Buchstabe d eingegeben.";
            cout << zahl1/zahl2 << endl;
        }
    

    Und wo wurde zahl1 bzw zahl2 definiert?
    Und selbst wenn, hat der User überhaupt scchon etwas eingegeben? Offensichtlich nicht.

    Außerdem würde es so doch schöner aussehen:

    cout << "Sie haben den Buchstaben " << eingabe << " eingegeben.";
    
    switch(eingabe)
    {
        case 'a':
            cout << zahl1*zahl2 << endl;
            break;
    
        case 'b':
    
        .......
    
    }
    

    Der Code ist imo (sorry, nicht böse gemeint) schlecht, allein schon das Header inkludieren zeigt dass du nicht wirklich weißt was du da machst...



  • Ja danke dir (:

    Aber mit SWITCH Arbeite ich lieber noch nicht , sonst denkt der Chef ich kann das schon:-P

    Aktueller Code:

    #include <cstdlib> 
    #include <stdlib.h>
    
    int main(int argc, char* argv[])
    
    {
            // Deklaration i,b vom Datentyp int. Initialisierung mit dem wert 0.
        int zahl, zahl1, zahl2;
        char eingabe;
    
        cout << "Hallo bitte geben Sie Buchstaben von A bis D ein:\n";
    
        cin >> eingabe;
    
        if (eingabe == 'a' )  
    
        {
            cout << "Sie haben die Buchstabe a eingegeben.";
    		cout << zahl1*zahl2 << endl; 
    
        }
    
    	if (eingabe == 'b' )  
    
        {
    		cout << "Sie haben die Buchstabe b eingegeben.";
    		cout << zahl1+zahl2 << endl; 
        }    
    
    	if (eingabe == 'c' ) 
    
        {
            cout << "Sie haben die Buchstabe c eingegeben.";
    		cout << zahl1-zahl2 << endl; 
    
    	}
    
        if (eingabe == 'd' )   
    
        {
            cout << "Sie haben die Buchstabe d eingegeben.";
    		cout << zahl1/zahl2 << endl; 
    
        cout << "Hallo bitte geben Sie 2 Zahlen ein:\n";
    
        cin >> zahl;
    
        // Programm läuft einwandfrei , es gibt daher 0 zurück.
    	return(0);
    
    }
    


  • #include <cstdlib> 
    #include <stdlib.h>
    

    1. header brauchst du nicht
    2. gibt es nicht
    3. hast du den vergessen, den du brauchst

    ->

    #include <iostream>
    

    falls du mit vorkompiliertem header arbeitest, fehlt ganz oben noch ein

    #include "stdafx.h"
    
    int main(int argc, char* argv[])
    

    brauchst du nicht

    int main()
    

    reicht da

    if (eingabe == 'd' )   
    
        {
            cout << "Sie haben die Buchstabe d eingegeben.";
            cout << zahl1/zahl2 << endl;
    

    hier fehlt ne klammer ( } )...

    return(0);
    

    die klammern da sind unnötig - und das return 0 in der main-fkt ist auch unnötig...

    das wars zwar noch lange nicht, aber vorerst sind das wohl genug fehler^^

    bb


Anmelden zum Antworten