Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Hybrid-Darstellung

  1. #1
    Anfänger Avatar von Einstein
    Registriert seit
    22.04.2017
    Beiträge
    17

    Standard Anfänger Fragen - c++

    Servus,

    ich hatte schon sehr lange vor mich mal intensiv mit dem Programmieren zu befassen, kein copy und paste um mein Ziel mit Code schnipsel zusammen zu pfriemeln.
    Also fange ich dementsprechend von "0" an, ich verfolge ein kleines Tutorial einer App die das ganz nett gemacht hat in dem man interaktiv das gelernte gleich nach der Info anwenden kann.

    Ich mache derzeit kleinste Übungen zu Variablen und haben den Code hier :

    PHP-Code:
    #include <iostream>
    using namespace std;

    int main()
    {
        
    int a;
        
    cout << "Please enter a number \n";
        
    cin >> a;

        
    cout << a;

        return 
    0;

    Da stellt sich mir die Frage woher weiß das "Programm" jetzt das der Input eine Zahl sein muss ?

    mfg Einstein
    Geändert von Einstein (25.04.2017 um 22:46 Uhr)

  2. #2
    Wiederbelebt Avatar von Cystasy
    Registriert seit
    08.05.2015
    Beiträge
    685

    Standard AW: Anfänger Fragen - c++

    Zitat Zitat von Einstein Beitrag anzeigen
    Da stellt sich mir die Frage woher weiß das "Programm" jetzt das der Input eine Zahl sein muss ?

    Daran:

    Code:
    int a;
    Int ist die Abkürzung für "Integer", was eine Zahl darstellt.
    Mit int variablename erstellst du quasi eine Integer Variable.. und in diese Variable können dann logischerweise nur Zahlen rein
    Da gibts dann aber auch noch Variablen Arten wie char, float etc. die dann entsprechend andere Daten annehmen (Char Zeichen, Float Zahlen, Strings usw.)

    p.s: Schon ne Weile her als ich C++ gemacht hab, daher Sorry falls ichs nicht krass Detailiert beschreiben kann

    grüße
    エロ <3

  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Einstein (26.04.2017)

  4. #3
    Anfänger Avatar von Einstein
    Registriert seit
    22.04.2017
    Beiträge
    17

    Standard AW: Anfänger Fragen - c++

    Danke für die Info, ja das kenne ich so richtig intensiv mit dem Programmieren habe ich mich vor ~ 6 Jahren beschäftigt meiner Meinung nach verlorene Zeit also kann ich da mit fühlen

    Das interessant, dann kann ich mir die Variablen wie Bibliotheken vorstellen mit verschiedenen Eigenschaften.

    Ich hätte dazu noch 2 Fragen :
    Wie regelt man dann die Situation wenn es Zeichen, Zahlen und co haben soll bzw. mehr als nur einen Input ?
    Und wie stelle ich das an das sich das ganze erst schließt wenn auch wirklich eine Zahl eingegeben wurde bzw. dementsprechend das was durch die Variable gewollt ist, so wie es da oben steht schließt es sich nach dem ersten Input egal ob Zahl der Buchstabe.

    mfg Einstein

  5. #4
    Wiederbelebt Avatar von Cystasy
    Registriert seit
    08.05.2015
    Beiträge
    685

    Standard AW: Anfänger Fragen - c++

    Zitat Zitat von Einstein Beitrag anzeigen
    Wie regelt man dann die Situation wenn es Zeichen, Zahlen und co haben soll bzw. mehr als nur einen Input ?
    Indem du einfach mehrfach Dinge abfrägst, dann aber eben mit verschiedenen Variablen^^
    Oder du nimmst ein Variablen Typ wie z.b String.. dann ist es halt keine Zahl oder so mehr sondern ein String.. heißt wenn du dann z.b 2 Zahlen hast die jeweils als String gespeichert sind, musst die erst nach Int konvertieren damit du diese 2 Zahlen zusammenrechnen kannst.

    Zitat Zitat von Einstein Beitrag anzeigen
    Und wie stelle ich das an das sich das ganze erst schließt wenn auch wirklich eine Zahl eingegeben wurde bzw. dementsprechend das was durch die Variable gewollt ist, so wie es da oben steht schließt es sich nach dem ersten Input egal ob Zahl der Buchstabe.
    Also.. das sich dein Programm direkt nach der Eingabe schließt, liegt daran das du return 0; machst und danach dein Programm beendet wird, und du da eben keine Pause eingebaut hast^^
    Und wenn du möchtest das des Programm sich erst beendet wenn da eine Zahl vorkommt, musst du dein Programm eben so lange in einer Schleife laufen lassen und nach jeder Eingabe kontrollieren ob das eingegebene eine Zahl ist bis der User deines Programms dann auch eine Zahl eingibt.. falls nicht wird die Schleife halt weiter ausgeführt bis dies der Fall ist^^

    Schlagworte die du dir dafür mal anschaun kannst:

    - If Abfragen
    - While Schleifen

    grüße
    エロ <3

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Einstein (26.04.2017)

  7. #5
    CIH-Virus Avatar von 55F
    Registriert seit
    25.09.2008
    Beiträge
    436

    Standard AW: Anfänger Fragen - c++

    Integer == Ganzzahl
    Float == Fließkommazahl
    String == Zeichenkette
    Char == einzelnes Zeichen

    Die Variable "a" wurde als Integer deklariert, genauso kannst du weitere Variablen/Konstanten (.z.B. mit weiteren Datentypen) deklarieren.
    #include <iostream>
    #include <string>
    using namespace std;

    int main (void); {
    string name; // Eine Variable vom Datentyp String
    cout << "Bitte Namen eingeben\n";
    cin >> name;
    cout << "Hallo" << name << endl;
    cin.get() // Erwartet eine Eingabe bevor das Programm geschlossen wird.
    return 0;
    }
    Ihr dürft mich gerne korrigieren/steinigen falls ich komplett daneben oder falsch liege.
    Gefunden habe ich noch ein Openbook: https://de.wikibooks.org/wiki/C%2B%2...ung_in_C%2B%2B

  8. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Einstein (26.04.2017)

  9. #6
    Sobig Wurm Avatar von Leange
    Registriert seit
    06.09.2008
    Beiträge
    220

    Standard AW: Anfänger Fragen - c++

    Code:
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string name; // Eine Variable vom Datentyp String
        cout << "Bitte Namen eingeben\n";
        cin >> name;
        cout << "Hallo" << name << endl;
        cin.get(); // Erwartet eine Eingabe bevor das Programm geschlossen wird.
        return 0;
    }
    Das Problem damit ist, dass du die Eingabe vom Namen mit Enter abschließt.
    Dein inputstream sieht dann so aus "eingegebenerName\n".
    In die Variable name kommt aber nur "eingegebenerName", das \n murkst immer noch im buffer rum.
    cin.get() findet das \n un dein Programm schließt sich.

    Also entweder so:
    Code:
    int main() {
        
        string name;
        cout << "Bitte Namen eingeben: ";
        cin >> name;
        
        cout << "Deine name: " << name << endl;    
        
        cout << "Press Enter ...";
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin.get();
    
        return 0;
    }
    Oder wenn der String Leerzeichen enthalten soll:
    Code:
    int main() {
        
        string name;
        cout << "Bitte Namen eingeben: ";
        getline(cin, name);
        
        cout << "Deine name: " << name << endl;    
        
        cout << "Press Enter ...";
        cin.get();
    
        return 0;
    }
    getline() nimmt das \n mit weg, deshalb kannste dir cin.ignore() sparen.

    Aber! Wenn du erst cin>>irgendwas; machst und dann getline(), bekommste auch wieder das gleiche Problem. getline() findet das Zeilenende das noch im buffer ist und liest den Rest nicht.
    Gibt dann bessere Möglichkeiten mit stringstreams ect., aber Hauptsache du hast es schonma gehört xD.

    Das interessant, dann kann ich mir die Variablen wie Bibliotheken vorstellen mit verschiedenen Eigenschaften.
    Näh es sind mehr die Operatoren die das Regeln. In dem Fall:
    http://www.cplusplus.com/reference/i...perator%3E%3E/
    Du kannst die Operatoren auch überladen für eigene Klassen ect..
    Aber das wird jetzt zu deep fürn Anfang. Hastes mal gehört.

    Leange

    Freiheit stirbt mit Sicherheit

  10. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    55F (26.04.2017), Einstein (26.04.2017)

  11. #7
    Bad Times Virus
    Registriert seit
    14.03.2009
    Beiträge
    579

    Standard AW: Anfänger Fragen - c++

    Zitat Zitat von Einstein Beitrag anzeigen
    Da stellt sich mir die Frage woher weiß das "Programm" jetzt das der Input eine Zahl sein muss ?
    Das tut es eben nicht:
    Code:
    a@DESKTOP-JU125PR:/tmp$ cat einstein.cpp
    #include <iostream>
    
    
    int main() {
            int a;
    
    
            std::cin >> a;
            std::cout << a << '\n';
    }
    a@DESKTOP-JU125PR:/tmp$ g++ -o einstein einstein.cpp
    a@DESKTOP-JU125PR:/tmp$ ./einstein
    das hier ist gar keine Zahl
    0
    a@DESKTOP-JU125PR:/tmp$
    Ich geb Text ein und das wird "akzeptiert". std::cin will in eine Zahl schreiben -- wenn halt was anderes kommt haste Pech gehabt. Mir fällt gerade kein Weg (mit std::iostream) zu erkennen ob das was eingegeben wurde auch das richtige Format hatte.

    Sonst würde ich es halt so machen:
    Code:
    a@DESKTOP-JU125PR:/tmp$ cat main.cpp
    #include <iostream>
    #include <cstdio>
    #include <errno.h>
    
    
    int main() {
            int a;
    
    
            while(1) {
                    int ret = scanf("%d", &a);
                    // could an int be read?
                    if (ret == 1) {
                            break;
                    }
                    // is the stream fucked or has it ended?
                    else if (ferror(stdin) || feof(stdin)) {
                            return 0;
                    }
                    else {
                            /* remove the unparsed data from stdin, so the next call to scanf
                               doesn't read the same data again
                               todo: find out why fflush(stdin) doesn't work */
                            getchar();
                    }
            }
    
    
            std::cout << a << '\n';
    }
    a@DESKTOP-JU125PR:/tmp$ ./einstein
    aaaa
    abc
    123
    123
    a@DESKTOP-JU125PR:/tmp$
    ist aber glaube ich nicht wirklich Anfängerfreundlich
    Geändert von wacked (26.04.2017 um 14:52 Uhr) Grund: s/ein String/Text/

  12. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Einstein (26.04.2017), Leange (26.04.2017)

  13. #8
    Trojaner Avatar von s3rb31
    Registriert seit
    21.01.2010
    Beiträge
    75

    Standard AW: Anfänger Fragen - c++

    Also ich versuche mal hier ein wenig Licht ins Dunkle zu bringen.

    Zitat Zitat von wacked Beitrag anzeigen
    Ich geb Text ein und das wird "akzeptiert". std::cin will in eine Zahl schreiben -- wenn halt was anderes kommt haste Pech gehabt.
    Also das es akzeptiert stimmt nicht ganz. Die Daten liegen auch noch auf dem Stream, wenn nicht akzeptiert wurde!

    Zitat Zitat von wacked Beitrag anzeigen
    Mir fällt gerade kein Weg (mit std::iostream) zu erkennen ob das was eingegeben wurde auch das richtige Format hatte.
    Dafür gibt es ja die Dokumentation

    Also es gibt drei Statusflags in der std::ios. Grob kann man das so beschreiben:

    - das Badbit wird nur bei ernsthaften IO Fehlern gesetzt
    - das Failbit für Operationen die einen Fehler erzeugen dürfen
    - das Eofbit um zu signalisieren dass das Ende des Streams erreicht wurde

    Für unseren Fall ist das Failbit interessant. Ich habe mal ein wenig Beispielcode vorbereitet:


    Zu dem Beispiel von wacked:

    Sonst würde ich es halt so machen:
    Code:
    #include <iostream>
    #include <cstdio>
    #include <errno.h>
    
    int main() {
            int a;
    
            while(1) 
            {
                    int ret = scanf("%d", &a);
                    // could an int be read?
                    if (ret == 1) {
                            break;
                    }
                    // is the stream fucked or has it ended?
                    else if (ferror(stdin) || feof(stdin)) {
                            return 0;
                    }
                    else {
                             // remove the unparsed data from stdin,
                             // so the next call to scanf doesn't 
                             // read the same data again
                             // todo: find out why fflush(stdin) 
                             // doesn't work 
    
                            getchar();
                    }
            }
    
            std::cout << a << '\n';
    }
    Bitte nicht! Hier wird C mit C++ vermischt was in den seltensten Fällen zu empfehlen ist, und m. M. n. auch kein guter Style ist! Eine schöne Erklärung warum man das nicht will gibt es hier.

    Abschließend bleibt noch zu sagen dass Reguläre Ausdrücke für das validieren von Zahlen, wortwörtlich, mit Kanonen auf Spatzen schießen ist! Mit welchen anderen Problemen man dann zu Kämpfen hat zeigt die Exception weiter oben ganz gut finde ich!
    Geändert von s3rb31 (29.04.2017 um 02:32 Uhr)

  14. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    wacked (29.04.2017)

  15. #9
    Bad Times Virus
    Registriert seit
    14.03.2009
    Beiträge
    579

    Standard AW: Anfänger Fragen - c++

    Zitat Zitat von s3rb31 Beitrag anzeigen
    Dafür gibt es ja die Dokumentation
    Ok ja ich hätte wenigstens versuchen können das rauszufinden, aber cppreference ist ein bisschen wie die man pages: Um etwas komplett neues herauszufinden sind die ungeignet, die sind nur als Nachlagwerk top.

    [QUOTE]Also das es akzeptiert stimmt nicht ganz. Die Daten liegen auch noch auf dem Stream, wenn nicht akzeptiert wurde![/QUOTE]Ähm kann ich jetzt nicht reproduzieren:
    Code:
    $ cat s3rb31.cpp
    #include <iostream>
    #include <string>
    
    
    int main() {
            int a;
            std::string b, c;
    
    
            std::cin >> a >> b;
            std::cin >> c;
            std::cout << a << ',' << b << ',' << c << '\n';
    }
    $ g++ -o x s3rb31.cpp
    $ ./x
    a b c
    0,,


    Zitat Zitat von Leange Beitrag anzeigen
    Ffs c++17 ist wip. Benutzt compiler mit ner ordentlichen c++11 Implementierung oder btfo. xD
    Naja, guck dir das mal an: http://en.cppreference.com/w/cpp/compiler_support

    Klar die großen 3 (gcc, MSVC, clang) haben fast alles aber wenn man sich mal anhand der Versionsnummern anguckt wann die ersten Features implementiert wurden und wann die letzten...

  16. #10
    Trojaner Avatar von s3rb31
    Registriert seit
    21.01.2010
    Beiträge
    75

    Standard AW: Anfänger Fragen - c++

    Zitat Zitat von wacked Beitrag anzeigen
    Ok ja ich hätte wenigstens versuchen können das rauszufinden, aber cppreference ist ein bisschen wie die man pages: Um etwas komplett neues herauszufinden sind die ungeignet, die sind nur als Nachlagwerk top.
    Dafür gibt es Google

    Ähm kann ich jetzt nicht reproduzieren:

    Code:
    $ cat s3rb31.cpp
    #include <iostream>
    #include <string>
    
    
    int main() {
            int a;
            std::string b, c;
    
    
            std::cin >> a >> b;
            std::cin >> c;
            std::cout << a << ',' << b << ',' << c << '\n';
    }
    $ g++ -o x s3rb31.cpp
    $ ./x
    a b c
    0,,
    Hast du meinen Beispielcode gelesen? Wenn du nicht abfragst ob da ein Fehler passiert ist und das Failbit clearest, kann es ja auch nicht klappen.

    Code:
    #include <string>
    #include <iostream>
    
    bool check_input()
    {
    	if(std::cin.fail())
    	{
    		std::cin.clear();
    		return false;
    	}
    
    	return true;
    }
    
    int main() 
    {
    	int a;
    	std::string b, c;
    
    	std::cin >> a >> b >> c;
    
    	if (!check_input())
    	{
    		std::cin >> b >> c;
    		std::cout << "Zahl ungültig. " << b << ',' << c << std::endl;
    
    		return 1;
    	}
    	
    	std::cout << a << ',' << b << ',' << c << std::endl;
    
    	return 0;
    }
    [18:40:13] s3rb31@archbase:~ $ ./a.out
    a b c
    Zahl ungültig. a,b
    [18:40:16] s3rb31@archbase:~ $ ./a.out
    1 a b
    1,a,b
    [18:40:25] s3rb31@archbase:~ $ ./a.out
    0s 123 a
    0,s,123

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. anfänger tut
    Von KifKif im Forum Trashbox
    Antworten: 5
    Letzter Beitrag: 28.02.2010, 15:34
  2. Für PHP-Anfänger
    Von Floo im Forum PHP
    Antworten: 0
    Letzter Beitrag: 29.09.2007, 13:53
  3. bin ein anfänger
    Von baldessarini im Forum Wireless-Lan
    Antworten: 6
    Letzter Beitrag: 23.09.2007, 23:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •