Funktion ''bool intTest(int n, char c)'' ohne schleifen berechnen



  • warum bekomme ich immer die ausgabe 0 ?

    #include<iostream>
    using namespace std;
    
    bool intTest(int n, char c){
    
    	bool test = true;	
    
    	if(n%10 ==c){
    		return test;
    	}else if(!n){
    			test = false;
    			return test;
    		}else{
    			return intTest(n/10, c);
    	}
    
    }
    
    int main(){
    
    	int n ;
    	char c;	
    	cout << "Bitte geben Sie die 2 Zahle ein\n";
    	cin >> n >> c;
    
    	cout << intTest(n , c);
    
    	cout << endl;
    
    	return 0;
    
    }
    

  • Mod

    istream& operator>> (istream& is, char& ch );
    

    macht ganz was anderes, als du vermutlich denkst. Oder eigentlich macht er schon das was du denkst, du vergisst bloß, dass '2' != 2 (das linke ist ein char, das rechte ein int).

    Dein test = ... ; return test; ist irgendwie niedlich. Wie wäre es mit return ...; ?



  • danke für deinen Tipp. klingt sinnfoller

    darf man so machen int *hilfepointer = 0, leider bekomme ich Segmentation fault

    du meinst dass ich mit pointer machen muss,
    ich habe so versucht, dass ich pointer definiert habe auf *pn und *pc
    dann habe ich hilfspointer eingeführt was auf den wert n%10 zeigt und dann immer mit *pc vergliechen, das funktionert auch nicht weil charpointer und intpointer können nicht auf gleiche datentype zeigen


  • Mod

    Häh? Wo habe ich einmal das Wort Pointer oder gar bloß einen Stern benutzt? Mir scheint, du hast eine ganz andere Antwort aus einem anderen Thread gelesen 😕



  • weil du das geschrieben hast

    istream& operator>> (istream& is, char& ch );
    

    hast du mit & nicht adresse gemeint?

    was bedeutet das was du geschrieben hast für eine ungeschickte programmierin?



  • Das ist der operator>> (rechter Shift operator, wird gern für die Eingabe verwendet), der hier so überladen wird, dass du ihn für einzelne Zeichen benutzen kannst.
    Dafür wird dem Operator ein istream -Objekt (in deinem Falle cin ) übergeben und eine Referenz (wird durch das & verdeutlicht) auf das Zeichen, in welches das eingelesene geschrieben werden soll.
    Das & hat in diesem Falle nichts mit Zeigern zu tun, sondern zeigt an, dass der Übergabeparameter eine Referenz ist bzw. bei der Übergabe eine Referenz auf den übergebenen Wert erstellt wird.
    Die Überladung des Operators sorgt dafür, dass du ihn eben für Eingaben verwenden kannst.

    Aber da sollte ein gutes Anfängerbuch wohl mehr nützen als Sepp oder ich oder sonstwer hier.


  • Mod

    Das ist die Signatur der Funktion, die du in Zeile 25 benutzt hast. Das ist eine Funktion aus der Standardbibliothek, die hat eben diese Signatur. Das & ist in diesem Zusammenhang auch nicht der Adressoperator, sondern das Zeichen für eine Referenz.

    Um das mal auf allerniedrigstem Niveau noch einmal zu sagen:

    char wert;
    std::cin >> wert;
    

    und

    int wert;
    std::cin >> wert;
    

    Beide Male tippst du "2" ein. Dann ist der Wert von wert in beiden Fällen ein ganz anderer, denn es wurden völlig verschiedene Funktionen benutzt. Im ersten Fall ist der Wert '2' (das Zeichen für die Ziffer), im zweiten Fall ist der Wert 2 (die Zahl, zum Beispiel die Anzahl der I's hier: II ). Es gilt auf fast allen Systemen '2' != 2.



  • khati schrieb:

    warum bekomme ich immer die ausgabe 0 ?

    Wahrscheinlich deswegen, weil du es nicht geschafft hast, andere Werte einzugeben, so dass keine 0 rauskommt.

    Viel praktischer wäre jetzt die Information deinerseits gewesen, was du bei bestimmten Eingaben für Ausgaben erwartest.

    Auch praktisch wär jetzt gewesen, zu verraten, was intTest eigentlich machen soll, also welches Problem du mit intTest zu lösen versuchst.

    khati schrieb:

    int n ;
    	char c;	
    	cout << "Bitte geben Sie die 2 Zahle ein\n";
    	cin >> n >> c;
    

    Das sieht komisch aus. Ich kann mir denken, dass hier nicht das passiert, was du willst. Bist du dir im Klaren darüber, dass der Wert von c nicht der eingegebenen Zahl sondern dem Code für das Zeichen der eingegebenen Zahl entspricht? Wenn du nicht gerade auf einer exoktischen Platform arbeitest, dann hat das Zeichen '0' beispielsweise den Wert 48, siehe ASCII-Tabelle; denn mit "cin>>c" wird ein Zeichen nur gelesen, nicht als Ganzzahl interpretiert und konvertiert. "cin>>n" hingegen liest mehrere Zeichen ein, interpretiert das als Ganzzahltext und schreibt den interpretierten Wert in die Variable n rein.



  • khati schrieb:

    warum bekomme ich immer die ausgabe 0 ?

    weil in Zeile 8

    if(n%10 ==c){
    

    steht und nicht

    if(n%10 == c-'0'){
    

    probier's aus



  • Schreiben Sie eine Funktion ''bool intTest(int n, char c)'', die prüft, ob die Ziffer c in der Zahl n vorkommt. Verwenden Sie in der Funktionsdefinition keine Schleifen.
    damit

    int n ;
        char c;
        cout << "Bitte geben Sie die 2 Zahle ein\n";
        cin >> n >> c;
    

    habe ich int und char eingelesen und mit diese werte intTest(n, c) aufgerufen

    wenn ich manuel in intTest(1234,2) schreibe oder intTest(1234,8) bekomme ich erwünschte ausgabe 1 bzw 0

    aber wenn ich von komandozeile einlese diese werte bekomme ich immer die ausgabe 0
    was kann ich in meine Logik ändern?



  • @Werner_logoff
    so hat es geklappt

    if(n%10 == c-'0')
    

    jetzt werde ich googeln was das genau macht und höffe dass ich in langzeitgedächtniss seichern werde



  • khati schrieb:

    jetzt werde ich googeln was das genau macht

    😃 genau das haben SeppJ, Der Tobi und Krümelkacker bereits versucht Dir zu erklären - wie man hier liest, ohne Erfolg.
    'google' mal nach Dingen, die Du in Ihren Antworten nicht verstehst, oder frage einfach konkret nach.



  • auf jedenfall danke für die hilfe


Anmelden zum Antworten