Code fehler

01/10/2014 13:11 DonPadrio#1
Hay,
ich hab da irgendwas falsch gemacht...
Code:
#include<stdio.h>

int main() {
        int a = 0.0;
        char b = 0;
        int c = 0.0;
        char d = 0;
        int e = 0.0;
        int ergebnis = 0.0;

        printf("Taschenrechner\n");                             //Variabel bestimmung
        printf("Geben sie die 1. Zahl ein: ");                  //und scanen
        scanf("%d",&a);                                         //oder auslesen
        printf("Geben sie die rechenart ein: ");                //der eingegebenen zahlen
        scanf("%c",&b);                                         //oder zeichen
        printf("Geben sie die 2. Zahl ein: ");                  //
        scanf("%d",&c);                                         //
        printf("Geben sie die rechenart ein: ");                //
        scanf("%c",&d);                                         //
        printf("Geben sie die 3. Zahl ein: ");                  //
        scanf("%d",&e);                                         //

        if(b == '+') {
                printf("\n Addition wird durchgeführt.");
                ergebnis = a + b;
        }

}
Ich habe nicht die möglichkeit bei den operanten was einzugeben der satz wird nur ausgegeben Kann mir jemand sagen wo der Fehler ist?
01/10/2014 14:41 dowhile#2
Geht es so?

Code:
scanf("\n%c", &b);
01/10/2014 16:03 qkuh#3
Oder:
Code:
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Nach jedem scanf
01/10/2014 16:53 MrMokey#4
Erstmal solltest du grundsätzlich deine Integer-Werte nicht mit einem 0|.0| deklarieren, weil man das Gefühl erhält, dass du double- oder float-werte verwenden wolltest.
Es reicht eine einfach 0, da int-Zahlen Ganzzahlen sind.
(Ähnliches sollte man beim "char"-Datentyp beachten[Bitte nicht mit einer einfachen 0 initialisieren.])
Dann wäre es hilfreich, wenn du den Satz auch auf dem Bildschirm zeigst und nicht nur eine einfache Rechnung durchführst.
Heißt:

printf("\n Addition wird durchgeführt.\nErgebnis: {0}",a+b);

Versuch es mal damit. :)
01/10/2014 17:08 qkuh#5
Quote:
Originally Posted by MrMokey View Post
(Ähnliches sollte man beim "char"-Datentyp beachten[Bitte nicht mit einer einfachen 0 initialisieren.])
Das ist egal.
01/10/2014 17:13 MrSm!th#6
Quote:
Originally Posted by qkuh View Post
Oder:
Code:
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Nach jedem scanf
Wenn er C nutzt, solltest du ihm keinen C++ Code geben.
01/10/2014 17:17 qkuh#7
Kann auch C++ sein, aber okay :) Hatte da jetzt nicht genau draufgeschaut.
Code:
while ((ch = getchar()) != '\n' && ch != EOF);
01/10/2014 17:27 MrMokey#8
Quote:
Originally Posted by qkuh View Post
Das ist egal.
Die Lesbarkeit des Quellcodes sollte immer hoch sein.
Ist dementsprechend nicht egal. Besser man lernt es bereits zu Anfang.
01/10/2014 17:36 qkuh#9
Ob da nun 0 oder '\0' steht. Das ändert nicht allzu viel an der Lesbarkeit. MMn jedenfalls. Kann jeder machen wie er mag. Normalerweise verdeutlichen die Variablennamen schon, ob es sich konkret um eine Zahl oder ein Zeichen handelt.
01/10/2014 18:00 MrMokey#10
Normalerweise schon, aber garantieren kann man's nicht und hilfreich ist es (meiner Meinung nach) immer, wenn man auch in der Deklaration klar ersichtlich macht um welchen Typ es sich handelt. :)
01/10/2014 19:05 MrSm!th#11
Quote:
Originally Posted by qkuh View Post
Kann auch C++ sein, aber okay :) Hatte da jetzt nicht genau draufgeschaut.
Code:
while ((ch = getchar()) != '\n' && ch != EOF);
Es ist definitiv C.
Quote:
Originally Posted by MrMokey View Post
Die Lesbarkeit des Quellcodes sollte immer hoch sein.
Ist dementsprechend nicht egal. Besser man lernt es bereits zu Anfang.
Quote:
Originally Posted by MrMokey View Post
Normalerweise schon, aber garantieren kann man's nicht und hilfreich ist es (meiner Meinung nach) immer, wenn man auch in der Deklaration klar ersichtlich macht um welchen Typ es sich handelt. :)
Hast du vergessen, dass char durchaus auch ein integraler Typ ist?
Ich wüsste nicht, wieso ich Escapesequenzen nutzen sollte, um ein Byte mit dem Wert 0 zu belegen.

Und in der Deklaration sieht man es am Datentyp selbst :facepalm:
01/10/2014 20:34 qkuh#12
Woran siehst du, dass es definitiv C ist?
01/10/2014 22:14 XxharCs#13
Quote:
Originally Posted by qkuh View Post
Woran siehst du, dass es definitiv C ist?
Paar Unterschiede mal als kleines Bsp.:
C
Code:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int zahl = 0;
    printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%3d", &zahl);
    printf("Eingegebene Zahl: %d", zahl);

    return EXIT_SUCCESS;
}
C++
Code:
#include <iostream>

int main(int argc, char **argv)
{
    int zahl;
    std::cout << "Bitte Zahl eingeben!\n";
    std::cin >> zahl;
    std::cout << "Eingegebene Zahl: " << zahl;
    return 0;
}
Ich hoffe du kannst die Unterschiede erkennen.
01/11/2014 00:50 qkuh#14
Trotzdem kann es theoretisch cpp sein, auch wenn es aussieht wie C. Vorallem seh ich da auch nichts vom C95 oder C99 Standard.
01/11/2014 10:14 MrMokey#15
Quote:
Originally Posted by MrSm!th View Post
Hast du vergessen, dass char durchaus auch ein integraler Typ ist?
Ich wüsste nicht, wieso ich Escapesequenzen nutzen sollte, um ein Byte mit dem Wert 0 zu belegen.

Und in der Deklaration sieht man es am Datentyp selbst :facepalm:
Sind vielleicht einfach unterschiedliche Programmierstile, aber ich denke, dass solche Sachen, gerade bei Anfängern, die Fragen aufwerfen, ob hier nicht ein Zahlenwert gewünscht war statt eines Char-Wertes.
Ist meine persönliche Meinung ;)