Programm aus Buch nicht ausführbar - woran kann es liegen ?



  • Häkchen habe ich gesetz (bei BBCode)

    Leider bringt das "Switchen" nichts

    ------ Erstellen gestartet: Projekt: ta25, Konfiguration: Debug Win32 ------
    Kompilieren...
    cl : Befehlszeile error D8045 : Die C-Datei ".\ta25.cpp" kann nicht mit der /clr-Option kompiliert werden.
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2008\Projects\ta25\ta25\Debug\BuildLog.htm" gespeichert.
    ta25 - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Bevor ich ins Bett abhaue noch was fast wichtigeres:
    Ich habe das Programm hier und es startet nicht - ebenfalls Exceptions

    #include <stdio.h>

    int main(){

    int i,d,b,h;
    /*Deklaration des structs zeileDIN1445*/
    typedef struct zeileDIN1445{
    int durchmesser;
    int laenge1;
    float laenge2;
    char innengewinde[9];
    }DIN1445;

    DIN1445 tabelleDIN1445 [9]= {
    {20,36,5.0,"M6"},
    {25,42,6.0,"M8"},
    {30,58,7.5,"M10"},
    {40,82,9.5,"M12"},
    {50,82,12.0,"M16"},
    {60,105,15.0,"M20"},
    {70,105,18.0,"M24"},
    {80,130,22.0,"M30"},
    {90,130,22.0,"M30"},};

    printf("-------------------------------------\n");
    printf("| Suchen in DIN144 |\n");
    printf("-------------------------------------\n\n");

    do
    {
    /*Benutzereingabe: Durchmesser*/
    printf("Bitte Durchmesser im Bereich 20mm bis 90mm in Zehnerschritten angeben. (Ausnahme: 25mm): ");
    scanf("%i",&d);
    } while((d >= 20 && d <= 90) && (d <= 20 || d > 30) && ((d%10 == 0) || (d == 25))); // Wertebereich prüfen und sicherstellen, dass der eingegebene Wert ein vielfaches von 10 oder genau 25 ist UND zwischen 20 und 90 liegt

    for(i = 0;i<8;i++)
    {
    if (d == tabelleDIN1445 [i] [1] )
    { b = tabelleDIN1445 [i] [2];
    h = tabelleDIN1445 [i] [3];
    break;//Eintrag gefunden, beenden der Schleife
    }
    }

    /*Ausgabe der Werte von b und h*/
    printf("\n\nDie Daten der Passfeder fuer den Durchmesser d= %i\n",d);
    printf("Länge l1= %i Länge l2= %i\n",b,h);
    return 0;
    }

    Ich habe den Struct eingelesen, umdefiniert, dann per Logikverknüpfung die werte rausgenommen die ich nicht will und will dann in der for schleife die Werte auslesen. Leider bockt er da mit nem C2676 ...

    ------ Erstellen gestartet: Projekt: ta21, Konfiguration: Debug Win32 ------
    Kompilieren...
    ta21.cpp
    .\ta21.cpp(38) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    C:\Programme\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): Siehe Deklaration von 'scanf'
    .\ta21.cpp(43) : error C2676: Binärer Operator '[': 'DIN1445' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
    .\ta21.cpp(44) : error C2676: Binärer Operator '[': 'DIN1445' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
    .\ta21.cpp(45) : error C2676: Binärer Operator '[': 'DIN1445' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2008\Projects\ta21\ta21\Debug\BuildLog.htm" gespeichert.
    ta21 - 3 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Das erstere mit der Zeichen Geschichte wäre gut fürs lernen - die letztere muss ich klären ... irgendwas ist da krumm er hakt beim Konvertieren des Wertes aus der Tabelle in den Integer Wert - hoffe ich habe bloss Tomaten auf den Augen !

    Danke Dir im Voraus !



  • Ich ahbe eigentlich den ersten Button unter den Smilies gemeint 🤡



  • Du hast anscheinend ein C++/CLI Projekt erstellt und das ist für C-Programme falsch. Fang ein neues Projekt 'Win32-Konsolenapplikation' an (mit Option 'Empty Files')...

    P.S. Irgendwie kommt mir das 2 Programm sehr bekannt vor, da gab es vor kurzem auch so eine Frage dazu - und ich Trottel dachte, das wäre ein selbsterstelltes Programm 😞



  • Danke Dir - es ist ein selbsterstelltes Programm nur ist es im Rahmen einer Aufgabe erstellt worden mit recht präzisen Anganben / Vorgaben.

    Also es war vorgegeben es mit einem strcut und typedef umzusetzen und dann beim suchen ne Kombination aus do/while schleife zu nutzen.

    Insofern werden sich die Programme schon ähneln.

    Habe meinen "Buck" gefunden - ich habe den struct falsch abgerufen
    statt "tabelle1445 [i] [ich nenne es mal Spalte]" muss es
    tabelle1445[i].spalte heißen - dann findet er es und zieht den
    Wert der Spaltenvariable "Spalte" an der Stelle [i] heraus ...

    Gruß

    geemo



  • Rhombicosidodecahedron schrieb:

    Ich ahbe eigentlich den ersten Button unter den Smilies gemeint 🤡

    Yep den habe ich angewählt ! Erklär mal bitte wie ich es genau mache - unter Smilies steht C/C++ Code Quote etc
    Darunter Auswahlfelder [blau]
    Dadrunter 2 Felder zum aktivieren / deaktivieren.

    Was wolltest Du haben ?
    Es ging doch dadrum, daß ein reinkopierter C Text farbig und formatiert und nicht als loser Text dargestellt wird oder ?

    Gruß

    geemo



  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo,

    Es ging doch dadrum, daß ein reinkopierter C Text farbig und formatiert und nicht als loser Text dargestellt wird oder ?

    Genau, und das wird durch den Einsatz von "C/C++" erreicht. Wenn du einmal darauf klickst, erscheint eine [cpp]-Markierung, die muss vor den zu formatierenden Code gestellt werden. Hat man das gemacht, erscheint ein "*" beim "C/C++", um darauf hinzuweisen, dass der nächste Klick darauf zu einer [/cpp]-Markierung führt, womit man den Code abschließt. Einfacher noch ist es, den Code mit der Maus zu markieren, und dann "C/C++" zu wählen, dann wird die einleitende und schließende Markierung automatisch richtig vor bzw. hinter den markierten Bereich gesetzt. So macht man das auch mit den anderen "Knöpfen" (bei z.B. Zitat, um sich auf etwas zu beziehen, habe ich das mit "Quote" gemacht)

    MfG,

    Probe-Nutzer



  • Probe-Nutzer schrieb:

    Hallo,

    Es ging doch dadrum, daß ein reinkopierter C Text farbig und formatiert und nicht als loser Text dargestellt wird oder ?

    Genau, und das wird durch den Einsatz von "C/C++" erreicht. Wenn du einmal darauf klickst, erscheint eine

    -Markierung, die muss vor den zu formatierenden Code gestellt werden. Hat man das gemacht, erscheint ein "*" beim "C/C++", um darauf hinzuweisen, dass der nächste Klick darauf zu einer
    

    -Markierung führt, womit man den Code abschließt. Einfacher noch ist es, den Code mit der Maus zu markieren, und dann "C/C++" zu wählen, dann wird die einleitende und schließende Markierung automatisch richtig vor bzw. hinter den markierten Bereich gesetzt. So macht man das auch mit den anderen "Knöpfen" (bei z.B. Zitat, um sich auf etwas zu beziehen, habe ich das mit "Quote" gemacht)

    MfG,

    Probe-Nutzer

    Auf gut Deutsch: drück auf "Zitieren" und schau, was dort drinnen steht.
    🙂



  • Damit das Programm richtig funktioniert musst du statt "bool" "BOOL" schreiben.
    Zusätzlich noch true -> TRUE, false -> FALSE.
    "bool" klein geschrieben gibt es als Datentyp bei C++ schon, jedoch das Buch ist noch aus der C-Zeit.
    Man erkennt den Unterschied daran , das "bool" blau wird wenn mans eintippt, BOOL jedoch bleibt schwarz.



  • Pfannes schrieb:

    Damit das Programm richtig funktioniert musst du statt "bool" "BOOL" schreiben.
    Zusätzlich noch true -> TRUE, false -> FALSE.
    "bool" klein geschrieben gibt es als Datentyp bei C++ schon, jedoch das Buch ist noch aus der C-Zeit.
    Man erkennt den Unterschied daran , das "bool" blau wird wenn mans eintippt, BOOL jedoch bleibt schwarz.

    Wieso hast du denn das ausgegraben?
    Und wieso hast du man: stdbool.h nicht erwähnt?
    🙂



  • Nenn die Datei nicht xy.cpp sondern xy.c. *.cpp Dateien werden in der Regel als C++ kompiliert und da ist zB bool ein keyword (daher der Fehler).



  • µngbd schrieb:

    Pfannes schrieb:

    Damit das Programm richtig funktioniert musst du statt "bool" "BOOL" schreiben.
    Zusätzlich noch true -> TRUE, false -> FALSE.
    "bool" klein geschrieben gibt es als Datentyp bei C++ schon, jedoch das Buch ist noch aus der C-Zeit.
    Man erkennt den Unterschied daran , das "bool" blau wird wenn mans eintippt, BOOL jedoch bleibt schwarz.

    Wieso hast du denn das ausgegraben?
    Und wieso hast du man: stdbool.h nicht erwähnt?
    🙂

    Ich habe die selbe Fehlermeldung erhalten und dann mal gegoogelt so hab ich dieses Thema hier entdeckt.
    Außerdem ist das eine Möglichkeit das Programm zum laufen zu bringen. 😉



  • @Pfannes
    Du erhältst die Fehlermeldung, weil du in C++ versuchst C zu programmieren. Nutz einfach einen C Compiler zum C programmieren und beachte meinen Beitrag davor...


Anmelden zum Antworten