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
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
C++: Fehler beim schreiben einer .tiff Datei mit Libtiff?

Hi,

das ist hoffentlich meine letzte Frage zu dem Thema :).

Ich habe ein Array mit allen RGBA-Werten für ein Bild im Byte Format (z.B.: 4282989356).
Nun möchte mit diesem Array eine neue Bilddatei vom Format .tiff schreiben und verwende dafür die Bibliothek libtiff.

Ich verwende folgenden Code:

auto image = new uint32[20976 * 20976];
for (uint32 row = 0; row < height; row++)
	{
		TIFFWriteScanline(tif, image, row, 0);
	}

Ich habe hier noch die Dokumentation für TIFFWriteScanline().

Das Programm schreibt eine neue .tif Datei, die sogar eine Dateigröße hat die ich erwarte. Allerdings sieht die Datei geöffnet leider so aus.

Ich bin mir nicht sicher ob ich mein Array einfach so übergeben kann. TIFFWriteScanline() erwartet eine Variable vom Datentyp tdata_t, was auch immer das sein soll.

Es gibt ein Tutorial, welches den Vorgang etwas anders implementiert. Im Tutorial werden ein image und buf Array deklariert, beide vom Typ char.

char *image=new char [width*height*sampleperpixel];
unsigned char *buf = NULL; 

Es wird die benötigte Speicher für eine Zeile festgelegt und für buf initialisiert.

tsize_t linebytes = sampleperpixel * width; 
buf =(unsigned char *)_TIFFmalloc(linebytes);

Schließlich wird wie bei mir über jede Zeile iteriert und dabei zunächst die Bilddaten in buf geschrieben und von buf in die .tif Datei.

for (uint32 row = 0; row < h; row++)
{
memcpy(buf, &image[(h-row-1)*linebytes], linebytes);   
TIFFWriteScanline(out, buf, row, 0)
}

Wobei ehrlich gesagt im Tutorial image nur deklariert aber nicht initialisiert wird. Wahrscheinlich muss es noch initialisiert werden. Aber kann ich meine RGBA Daten in Byte codes in ein Char array schreiben? Und wieso werden die Daten überhaupt zuerst in den buf geschrieben? Ist das wichtig und ggf. die Erklärung wieso mein Bild so bescheiden aussieht?
Ich bin gefühlt so kurz vorm Ziel was dieses kleine Projekt angeht und würde mich über Hilfen und Tipps sehr freuen :)

Bild zum Beitrag
programmieren, CPP, TIFF, Cpp Programierung
C++: Ursache für Lesezugriffsverletzung?

Hallo,

ich komme an einer Stelle nicht weiter und könnte noch einmal Hilfe gebrauchen. Ich nutze die Bibliothek Libtiff um die Farbwerte von einem Bild in einen Vector zu speichern bekomme aber eine Lesezugriffsverletzung. Anbei der Code:

void GetImage(TIFF* tif)
{
	uint32 npixels = width * height * sizeof(uint32);
	uint32* raster;
	std::vector <uint32> image;
	raster = (uint32*)_TIFFmalloc(npixels);
	if (TIFFReadRGBAImageOriented(tif, width, height, raster, ORIENTATION_TOPLEFT, 0) == 1)
	{
		std::cout << npixels << std::endl;
		for (uint32 i = 0; i < npixels; i++)
		{
			image.push_back(raster[i]);
		}
		std::cout << image[0] << std::endl;
	};
}

TIFFReadRGBAImageOriented

speichert die Pixelwerte von einem Bild in die Variable "raster" mit der Größe von "npixels". Ich möchte diese Werte später verwenden und sie deshalb global abspeichern. Deshalb habe ich den Vector

std::vector <uint32> image;

deklariert und möchte mit der for-Schleife die Werte von raster in image kopieren.

Ich bekomme leider folgende Fehlermeldung:

Ausgelöste Ausnahme: Lesezugriffsverletzung

std::forward<unsigned int const & __ptr64>(...) hat 0x22A6E503000 zurückgegeben.

npixels = 482241600. Wenn ich bei der for-Schleife anstelle von npixels 48224160 schreibe (also eine 0 weglasse), bekomme ich keine Fehlermeldung mehr. "raster" scheint also mehr Werte zu haben, als man in den Vector "image" hineinschreiben kann. Zumindest interpretiere ich das Problem so.

Ist meine Interpretation richtig und wenn ja, was kann ich tun um die Werte von raster irgendwie global abzuspeichern.

Viele Grüße

CPP, Cpp Programierung
C++ funktion() should have been declared inside namespace?

Hallo, ich arbeite gerade an einer Header Datei in C++. Aber ich kann nun nicht mehr weitermachen weil ständig ein Fehler auftaucht:

meinHeader.h:21:38: error: 'void meinNamespace::draw(int, int)' should have been declared inside 'meinNamespace'

Ich kann im Internet nichts hilfreiches finden und weiß nicht warum der Fehler auftaucht. Hier die betroffenen Codeabschnitte:

#include <Windows.h>
#include <WinUser.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include "meinHeader.h"

#define PI 3.14

enum meinNamespace::color {
    DARKBLUE = 1, 
    DARKGREEN, 
    DARKTEAL, 
    DARKRED,
    DARKPINK,
    DARKYELLOW,
    GRAY, 
    DARKGRAY, 
    BLUE, GREEN, 
    TEAL, 
    RED, 
    PINK, 
    YELLOW, 
    WHITE
};

struct meinNamespace::setColor {
    color _c;
    HANDLE _console_handle;
    setcolor(color c, HANDLE console_handle)
        : _c(c), _console_handle(0)
    { 
        _console_handle = console_handle;
    }
};


void meinNamespace::draw(int x, int y) {
    HWND myconsole = GetConsoleWindow();
    HDC mydc = GetDC(myconsole);

    int pixel =0;

    COLORREF COLOR= RGB(255,255,255); 


    for(double i = 0; i < PI * 4; i += 0.05) {
        SetPixel(mydc,pixel,(int)(50+25*cos(i)),COLOR);
        pixel+=1;
    }
    ReleaseDC(myconsole, mydc);
}

void meinNamespace::drawSquare(int aa, int ab, int ba, int bb) {
    draw(aa,bb);
}

Header:

#ifndef MEINHEADER_H
#define MEINHEADER_H

namespace meinNamespace {
    enum color {
        DARKBLUE=1,DARKGREEN,
        DARKTEAL,DARKRED,
        DARKPINK,DARKYELLOW,
        GRAY, DARKGRAY,
        BLUE,GREEN,
        TEAL,RED,
        PINK,YELLOW,
        WHITE
    };
    struct setcolor;
    void meinNamespace::draw(int x, int y);
    void meinNamespace::draw(int a, int b);
}

#endif

Die Funktionen sollen in ein Konsolenfenster Pixel schreiben, ob sie funktionieren weiß ich noch nicht und sie sind auch noch nicht fertig. Ich weiß nicht wo der Fehler verursacht wird. Ich hoffe jemand kann mir da helfen

LG

Software, IT, programmieren, CPP, development, Informatik, cpp lernen, Cpp Programierung
Arduino funktioniert nicht?

Hallo zusammen,

Ich wollte eben wieder etwas mit meinem Arduino machen. Um genau zu sein, einen einfachen 9g Servo steuern.

Allerdings lässt sich nichts auf den Arduino schreiben.

Com-Anschlussnummer habe ich jetzt auch schon mehrmals geändert. Auchanders Kable, anderen USB Port usw. Hat aber nichts gebracht.

(Was mir übrigens auch noch aufgefallen ist: Die grüne LED auf dem Arduino leuchtet durchgehend und blinkt nicht beim versuch ihn zu beschreiben.)

Bekomme immer diese Fehlermeldung:

avrdude: ser_open(): can't open device "\\.\COM3": Das System kann die angegebene Datei nicht finden.




avrdude: ser_drain(): read error: Das Handle ist ung�ltig.




avrdude: ser_send(): write error: sorry no info avail
avrdude: stk500_send(): failed to send command to serial port
avrdude: ser_recv(): read error: Das Handle ist ung�ltig.




avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: ser_send(): write error: sorry no info avail
avrdude: stk500_send(): failed to send command to serial port
avrdude: ser_recv(): read error: Das Handle ist ung�ltig.




Der ausgewählte serielle Port 
 ist nicht vorhanden oder das Board ist nicht angeschlossen
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: ser_send(): write error: sorry no info avail
avrdude: stk500_send(): failed to send command to serial port
avrdude: ser_recv(): read error: Das Handle ist ung�ltig.




avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: ser_send(): write error: sorry no info avail
avrdude: stk500_send(): failed to send command to serial port
avrdude: ser_recv(): read error: Das Handle ist ung�ltig.




avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: ser_send(): write error: sorry no info avail
avrdude: stk500_send(): failed to send command to serial port
avrdude: ser_recv(): read error: Das Handle ist ung�ltig.




avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: ser_send(): write error: sorry no info avail
avrdude: stk500_send(): failed to send command to serial port
avrdude: ser_recv(): read error: Das Handle ist ung�ltig.




avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer


Wäre sehr dankbar, wenn mir jemand helfen könnte.

Computer, Software, Microsoft, Programm, Netzteil, Hardware, Elektronik, programmieren, Elektrik, Mikrocontroller, Gaming, Cplusplus, Motor, Arduino, CPP, Visual Studio, Servo, Arduino Uno, Arduino IDE
c++ Mindestgenauigkeit?

Hey Leute,

brauche Hilfe bei folgender Aufgabe:

Lassen Sie dafür den Benutzer eine frei wählbare Mindest-Genauigkeit der Berechnung eingeben, wie z.B. 0.001(ein Tausendstel), und brechen Sie die Schleife ab, sobald die gewünschte Genauigkeit erreicht ist. Die Genauigkeit ergibt sich natürlich aus der Differenz zwischen den Werten von xnund xn-1.

Mein quellcode sieht bis jetzt so aus:

int main()
{
    double in{ 0.0 };                                       //Initialisieren der input Zahl
    double x{ 1.0 };
    double xn{ 1.0 };
    int p{ 0 };

    cout << "Geben Sie eine Fliesskommazahl ein um die Wurzel zu berechnen: \n";
    cin >> in;                                                      //Einlesen der zu berechnenden Zahl

    cout << "Geben Sie die gewuenschte Genauigkeit ein: " << "\n";  //User wird aufgefordert die Genauigkeit der double einzugeben
    cin >> p;

    if (in > 0);                                            //Wenn input höher als null ist wird ausgeführt:
    {
        cout << "Sie haben folgende Zahl zum berechnen eingegeben: " << in << "\n";                                 //Input Zahl wird ausgegeben
        while (x - (x-1) <= p)                         //i startet bei 0 und wird bis zum 8. Durchlauf ausgeführt
        {
            x = xn;                                         //Zuweisung für die Wurzel
            xn = (x + in / x) / 2;                          //Zuweisung der Formel der Wurzelberechnung für xn
           // cout.precision(p);                              //Die Zahlen werden mit der Genauigkeit p ausgegeben
            cout << x << "\n";                              //Ausgabe der Wurzelberechnung
        }
        
        cout << "Die Wurzelberechnung ergibt: " << x << "\n";
    }
    
    return 0;
}

wie kann ich meine while schleife ändern, sodass ich die aufgabe erfülle? hänge hier fest..

Computer, Schule, Mathematik, Technik, programmieren, CPP, Informatik

Meistgelesene Beiträge zum Thema CPP