Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C (alle ISO-Standards) ::  Taschenrechner in C     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
David B
Unregistrierter




Beitrag David B Unregistrierter 15:03:25 11.10.2017   Titel:   Taschenrechner in C            Zitieren

Hallo,

ich wollte einen Taschenrechner programmieren wo man einen kompletten string angeben kann und dieser dann ausgrechnet wird.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <string.h>
 
 
 
main() {
 
 
    double a = 0.00, b = 0.00;
    char string1[20], string2[20], eingabe[20], operator;
    int i=0, j=0, u=0;
 
    printf_s("---Taschenrechner---\n");
    printf_s("\nGeben Sie einen Term an: ");
    gets(eingabe);
 
    while (eingabe[i] != '+' && eingabe[i] != '-' && eingabe[i] != '*' && eingabe[i] != '/') {
 
        string1[u] = eingabe[i];
        i++;
        u++;
    }
 
    operator=eingabe[i];
 
    while (eingabe[i] > 0) {
 
        if (eingabe[i] != '+'){
        string2[j] = eingabe[i];
        i++;
        j++;
    }
        else{
            i++;
        }
    }
 
    string1[u] = '\0';
    string2[j] = '\0';
 
    a = atof(string1);
    b = atof(string2);
 
    switch (operator) {
 
    case '+':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a + b);
        break;
 
    case '-':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a - b);
        break;
 
    case '*':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a * b);
        break;
 
    case '/':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a / b);
        break;
 
    default :
 
        printf_s("\nFehler\n");
        break;
 
    }
    system("PAUSE");
 
    return(0);
}


Das Problem ist aber, dass a und b nicht die gewünschten Werte erhalten sondern immer noch gleich 0 sind.

Ich bedanke mich schon im Voraus für die Hilfe. :)
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4641
Beitrag Th69 Mitglied 15:11:44 11.10.2017   Titel:              Zitieren

Dann laß dir doch mal string1 und string2 sowie a und b ausgeben.

PS: gets solltest du ganz schnell aus deinem Programm verbannen (Stichwort: buffer overflow)! Nutze stattdessen entweder fgets oder aber scanf.
David B
Unregistrierter




Beitrag David B Unregistrierter 15:14:44 11.10.2017   Titel:              Zitieren

string1 und string2 besitzen beide die richtigen Werte. a und b bleiben aber 0.
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 28062
Beitrag SeppJ Global Moderator 15:51:38 11.10.2017   Titel:              Zitieren

Schuss ins Blaue: Du hast so etwas wie "1,2 + 4,5" eingegeben.

Die Zeilen 15-42 kannst du praktisch komplett und besser durch ein einfaches
C:
scanf("%lf %c %lf", &a, &operator, &b);
ersetzen.

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.
David B
Unregistrierter




Beitrag David B Unregistrierter 16:41:42 11.10.2017   Titel:              Zitieren

Die Zeilen 15-42 kannst du praktisch komplett und besser durch ein einfaches
C:
scanf("%lf %c %lf", &a, &operator, &b);
ersetzen.[/quote]


Wenn ich die Zeile einsetzte bekomme ich nachdem ich den string eingegeben habe die Nachricht "Taschenrechner.exe hat einen Haltepunkt ausgelöst." und es verweist mich in stdio.h zur Zeile "return __stdio_common_vfscanf(".
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 28062
Beitrag SeppJ Global Moderator 17:14:51 11.10.2017   Titel:              Zitieren

Zeig doch mal bitte den Code (Copy&Paste) und deine Eingabe, die zum besagten Ergebnis führt (ebenfalls Copy&Paste).

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4641
Beitrag Th69 Mitglied 09:27:58 12.10.2017   Titel:              Zitieren

Und schreib uns, welche Eingabenstring du benutzt (so wie SeppJ schon geschrieben hat, darfst du bei Zahlen kein Komma sondern mußt das US-englische Äquivalent '.' angeben - außerdem dürfen bei atof auch keine Leerzeichen da drin enthalten sein).

Ein Taschenrechner wird zwar häufig als Einstiegsbeispiel genommen, aber gerade bei der Auswertung der Eingabe hat C so seine Tücken - die man erstemal lernen muß ;-).
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 28062
Beitrag SeppJ Global Moderator 11:07:57 12.10.2017   Titel:              Zitieren

Th69 schrieb:

Ein Taschenrechner wird zwar häufig als Einstiegsbeispiel genommen, aber gerade bei der Auswertung der Eingabe hat C so seine Tücken - die man erstemal lernen muß ;-).
Der von mir gezeigt scanf sollte eigentlich narrensicher sein, deshalb bin ich gerade schwer verwirrt, was David B da falsch gemacht haben könnte. Meinen Formatstring würde ich auch nicht gerade tückisch nennen.

Wenn man es natürlich so versucht, wie David B es zuerst selber versucht hat, das ist außerordentlich tückisch.

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.
David B
Unregistrierter




Beitrag David B Unregistrierter 09:48:16 13.10.2017   Titel:              Zitieren

SeppJ schrieb:
Zeig doch mal bitte den Code (Copy&Paste) und deine Eingabe, die zum besagten Ergebnis führt (ebenfalls Copy&Paste).



Hier ist nochmal der neue Code:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <string.h>
 
 
 
main() {
 
 
    double a = 0.00, b = 0.00;
    char string1[20], string2[20], eingabe[20], operator;
    int i=0, j=0, u=0;
 
    printf_s("---Taschenrechner---\n");
    printf_s("\nGeben Sie einen Term an: ");
 
    scanf_s("%lf %c %lf", &a, &operator, &b);
 
    switch (operator) {
 
    case '+':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a + b);
        break;
 
    case '-':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a - b);
        break;
 
    case '*':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a * b);
        break;
 
    case '/':
 
        printf_s("\nDas Ergebniss lautet: %.2f\n", a / b);
        break;
 
    default :
 
        printf_s("\nFehler\n");
        break;
 
    }
    system("PAUSE");
 
    return(0);
}


Als string habe ich "12+13" benutzt.
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 3902
Beitrag Wutz Mitglied 12:32:40 13.10.2017   Titel:              Zitieren

Das kommt davon, wenn man das unsägliche scanf_s statt des vernünftigen scanf benutzt.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
C++ Forum :: C (alle ISO-Standards) ::  Taschenrechner in C   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.