C++: Wie kann ich eine Abfrage für die Wiederholung meines Programms einbauen?

Ich habe einen C++-Programmcode geschrieben, welcher zwei Zahlen addiert oder subtrahiert.

Nach der Ausgabe habe ich eine Abfrage eingebaut, welche abfragt, ob man noch eine weitere Addition/Subtraktion durchführen oder das Programm beenden möchte.

Leider funktioniert das nicht, obwohl es dies eigentlich tun sollte.

Ich komme nicht mehr weiter. Vielleicht kann jemand von euch mir helfen.

Hier der C++-Code:

#include <iostream>

using namespace std;

int entscheidung() {
  cout << "Hallo" << endl;
  cout << "1 zum addieren zweier Zahlen" << endl;
  cout << "2 zum subtrahieren zweier Zahlen" << endl;
  cout << "" << endl;

  int a;
  cin >> a;
  cout << "" << endl;
  cout << "" << endl;

  return a;
}

int rechner(int a) {
  if (a == 1) {
    cout << "Eingabe zweier Zahlen" << endl;
    cout << "Diese werden addiert" << endl;
    cout << "" << endl;

    int zahl1, zahl2;
    cin >> zahl1;
    cin >> zahl2;

    int zwischenergebnis = zahl1 + zahl2;
    cout << "" << endl;
    cout << zahl1 << " + " << zahl2 << " = ";

    return zwischenergebnis;
  }
  else if (a == 2) {
    cout << "Eingabe zweier Zahlen" << endl;
    cout << "Diese werden addiert" << endl;
    cout << "" << endl;

    int zahl1, zahl2;
    cin >> zahl1;
    cin >> zahl2;

    int zwischenergebnis2 = zahl1 - zahl2;
    cout << "" << endl;
    cout << zahl1 << " - " << zahl2 << " = ";

    return zwischenergebnis2;
  }
  else {
    cout << "---FEHLER---" << endl;
  }
}

int main() {
  int zahl = entscheidung();
  int a = rechner(zahl);
  cout << a << endl;
  cout << "" << endl;
  cout << "Moechten Sie weiter machen?" << endl;
  cout << "Geben Sie die Zahl 1 ein zum --FORTSETZEN-- !" << endl;
  cout << "Gebens Sie die Zahl 0 ein zum --STOPPEN--  !" << endl;

  int b;
  cin >> b;

  if (b == 1) {
    cout << "" << endl;
    return entscheidung();
  }
  else {
    cout << "ENDE" << endl;
    return 0;
  }
}
Cplusplus, CPP, Programmiersprache
Wie löse ich einen bison reduce/reduce Konflikt?

In einer anderen Frage dachte ich mir, dass es schöner wäre (alle anderen nicht...😋), wenn das Vorzeichen zur Zahl gehören würde, so dass das Potenzieren nicht das Vorzeichen abbindet... Da wollte ich mal sehen, ob man nicht einen Parser bauen kann, der es wie folgt versteht:Das läuft auch ganz gut, allerdings gibt es massenhaft sogenannte reduce/reduce Konflikte... Die bison Anleitung sagt zwar, dass diese Konflikte in meinem Sinne gelöst werden (die Regel, die zuerst kommt, die kriegt den Zuschlag), aber: Wie krieg ich die warning trotzdem weg?

Das da ist mein yy-file (auszugsweise):

exp:
   "-" "num"            { std::cout << "NUMinv" << $2 << std::endl; }
|  "num"                { $$ = new Float($1); std::cout << "num" << $1 << std::endl; }
|  "-" exp              { std::cout << "inv" << $2 << std::endl; }
|  exp "^" exp          { std::cout << '^' << std::endl; }
|  "name"               { std::cout << "var read:" << $1 << std::endl; };

bison sagt dann:

> bison -o viz-yy.c viz.yy -Wcounterexamples
viz.yy: warning: 10 reduce/reduce conflicts [-Wconflicts-rr]
viz.yy: warning: reduce/reduce conflict on tokens "+", "-", "*", "/", "^", ")", "]", "}", ",", ";" [-Wcounterexamples]
  Example: "-" "num" •
  First reduce derivation
    exp
    ↳ 5: "-" "num" •
  Second reduce derivation
    exp
    ↳ 8: "-" exp
             ↳ 6: "num" •
Cplusplus, FLEX, Programmiersprache, Syntax, Bison
C++: multiple definition...?

Hallo, ich habe in C++ einen Header erstellt, aber bei der Complierung kommt immer diese Fehlermeldung:

C:\Users\Admin\AppData\Local\Temp\ccdaLGOT.o:lexer.cpp:(.text+0x111): undefined reference to `Token::content[abi:cxx11]() const'
...(Zu lang zum abschicken)
collect2.exe: error: ld returned 1 exit status

Kann mir jemand sagen was der Fehler ist und wie ich ihn behebe?

token.hpp:

#ifndef TOKEN_HPP_
#define TOKEN_HPP_

#include <string>

class Token {
public:
    enum class Type {
        STRING,
        NUMBER,
        BOOLEAN,
        IDENTIFIER,
        EQUAL,
        PLUS,
        MINUS,
        TIMES,
        DIVIDE,
        LESS_THAN,
        GREATER_THAN,
        COMMENT,
        DOT,
        COMMA,
        SEMICOLON,
        CURLY_BRACKET_RIGHT,
        CURLY_BRACKET_LEFT,
        APOSTROPHE,
        COLON,
        UNEXPECTED
    };

    Token                (Type type)              noexcept;

    Type type            ()                       const noexcept;

    bool is                (Type type)               const noexcept;

    bool is_not            (Type type)               const noexcept;

    std::string content ()                       const noexcept;

    void change_content (std::string content)  const noexcept;

    void add_to_content (std::string content)  const noexcept;

    void clear_content  ()                       const noexcept;

    void change_type    (Type type)            const noexcept;

private:
    Type m_type;
    std::string m_content;
};

#endif

token.cpp:

#include "token.hpp"

#include <string>

Token::Token(Type type) noexcept : m_type{type} {};

Token::Type Token::type() const noexcept {
    return m_type;
}

bool Token::is(Type type) const noexcept {
    return m_type == type;
}

bool Token::is_not(Type type) const noexcept {
    return m_type != type;
}

std::string Token::content() const noexcept {
    return m_content;
}

void Token::change_content(std::string content) const noexcept {
    m_content = content;
}

void Token::add_to_content(std::string content) const noexcept {
    m_content = m_content + content;
}

void Token::clear_content() const noexcept {
    m_content.clear(); //Die clear Funktion geht auch nicht
}

void Token::change_type(Type type) const noexcept {
    m_type = type;
}

Ich hoffe jemand kann mir dabei helfen!

LG

PC, Computer, Software, programmieren, compiler, Cplusplus, CPP, development, Informatik, Informatiker, Programmiersprache, C (Programmiersprache), Cpp Programierung
(Neo)Vim Coc-extension wirft einen Fehler?

Guten Abend miteinander,

ich wollte fragen, ob hier vielleicht jemand (Neo)Vim mit der Coc-extension nutzt und mir bei einem Problem helfen kann?

Und zwar wollte ich einen language server hinzufügen, damit ich autocompletion für C++ nutzen kann. Ich habe also meine coc-settings.json erzeugt und geöffnet, sie war (logischerweise) komplett leer und ich habe sie auch am richtigen Speicherort erstellt, denn sie lässt sich aus Vim heraus mit :CocConfig öffnen.

Nun bin ich der Anleitung gefolgt,

:CocConfig, which will open main config file ~/.config/nvim/coc-settings.json
(empty for new installation). Add empty JSON object (like
{})

In die geschweiften Klammern habe ich nun den ccls language server eingefügt

https://github.com/neoclide/coc.nvim/wiki/Language-servers#ccobjective-c

Leider meldet sich beim öffnen von nvim jedoch immer eine Fehlermeldung und zwar:

Error detected while processing /home/xyz/.config/nvim/coc-settings.json:                                                                                                   
line   1:                                                                                                                                   E492: Not an editor command: { line  10:                                                                                                                                  E492: Not an editor command:        }   line  11:                                                                                                                                  E492: Not an editor command:      }

... und noch ein paar gleiche Zeilen mehr, kurzum er hat was gegen die geschweiften Klammern bzw das .json Format?

Ich weiß leider nicht was ich falsch gemacht habe und wie ich es löse, kann mir jemand helfen?

Ich freue mich über jede Antwort!

Computer, Technik, Linux, programmieren, Cplusplus, Shell
Was ist der Sinn hinter dem Überladen von Operatoren in C++ und wie funktioniert das genau?

Hi, wir haben uns gerade in der Vorlesung mit diesem Thema beschäftigt, ich habe aber nicht wirklich verstanden wie das funktioniert und wozu das ganze gut sein soll...

War leider auf Englisch, aber unser Prof hatte irgendwie was davon erzählt, dass das Überladen von Operatoren nützlich ist wenn man zb Plusrechnen mit dem + Operator nicht nur auf Zahlen beziehen möchte.

Man könnte ja auch irgendwie Objekte zusammenzählen, die man in irgendwelchen Klassen definiert hat.

Ich verstehe das irgendwie nur zur Hälfte, macht es Sinn sich das so vorzustellen, dass c++ Vektoren normal nicht über den + Operator addieren kann, und ich den Operator dann "überlade" und ihm damit die nötige zusätzliche Funktion dafür gebe und er danach zb auch Vektoren die ich über eine Klasse oder ein Struct definiert habe zusammenrechnen kann ?

Und ich frage mich etwas wie die überladung dann genau funktioniert, irgendwie unterscheiden sich diese dann ja weil es ja unäre und äre operatoren gibt, also welche die sich nur auf ein oder zwei Objekte beziehen...

Wäre nett wenn mir jemand weiterhelfen könnte.

Das hier ist zb eine Überladung des + Operators die ich nicht verstehe, was bezwecke ich damit ? Dass ich 2 Objekte des Typs RationalNumber die ich davor in einer Klasse definiert habe addieren kann ?

Bild zum Beitrag
Computer, Schule, programmieren, Cplusplus
Mein C++ Qt creator Programm stürzt bei eingaben von umlauten in ein Textfeld ab wie kann ich das verhindern?

Hallo in meinem Programm soll man wenn man einen text eingibt bestimmte dinge analysieren können(Zahl der Buchstaben, Zahl der Vokal ,...) ? allerdings stürzt das Programm ab, sobald man Umlaute eingibt

Mein bisheriger code aus mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton->hide();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_btnBuchstaben_clicked()
{
    DeleteLetter();
    CountLetter();
    ShowLetter();

}

void MainWindow::DeleteLetter()
{
    for (int i=0;i<256;i++)
        Buchstaben[i]=0;
}

void MainWindow::ShowLetter()
{
    QString work="";
    QString einzel;
    QString zahl;
    ui->AnalyseWidget->clear();
    ui->AnalyseWidget->addItem("Auswertung");
    for (int i=0;i<256;i++){
        einzel ="  _____ ";
        if (i>=32)
            einzel[0]=char(i);
        else {
            if (i<10){
                einzel[0]='0';
                einzel[1]='0'+i;
            }
            else if (i< 20) {
                einzel[0]='1';
                einzel[1]='0'+i-10;
            }
            else if (i<30) {
                einzel[0]='2';
                einzel[1]='0'+i-20;

            }
            else {
                einzel[0]='3';
                einzel[1]='0'+i-30;
            }
        }
        zahl = QString::number(Buchstaben[i]);
        for (int j = zahl.length()-1;j>=0;j--)
            einzel[7-zahl.length()+j]=zahl[j];
        work = work + einzel;
        if ((i+1)%8==0)
        {
            ui->AnalyseWidget->addItem(work);
            work="";
        }
    }

}

void MainWindow::CountLetter()
{
    QString Area = ui -> EingabeEdit -> toPlainText();
    for(int i = 0; i < Area.length();i++)
        Buchstaben[Area[i].toLatin1()]++;
}

void MainWindow::on_btnWoerter_clicked()
{
    CountWords();
}

void MainWindow::CountWords()
{
    QString Area;
    Area = ui -> EingabeEdit -> toPlainText();
    int i = 0, w = 0;
    bool Word = false;
    while (i < Area.length())
    {
        if (Area[i] == ' ' && Word)
        {
            Word = false;
            w++;
        }
        if (Area[i] == ' ' && !Word)
        {

        }
        if (Area[i] != ' ' && Word)
        {

        }
        if (Area[i] != ' ' && !Word)
        {
            Word = true;
        }
        i++;
    }
    if (Word == true)
    {
        w++;
    }
    QString o = QString::number(w);
    QString output = "Der Text hat " + o + " Wörter";
    ui -> AnalyseWidget -> clear();
    ui -> AnalyseWidget -> addItem(output);

}

//Vokale - aus vorhandenem Array rausholen
//Zahlen nachschauen und ausgeben



Computer, Technik, programmieren, Cplusplus, Qt Creator

Meistgelesene Beiträge zum Thema Cplusplus