[C] Programm stürzt ab

Benutzer-2472

abgemeldet
1 Mai 2006
32.694
1.621
PHP:
# include <stdio.h>
#include <stdlib.h> 
/*Die Eingabe/Ausgabebibliothek und die für system("pause")*/

int main(void) {
long nc=0; /*Zaehler deklarieren und initialisieren*/

printf("Dieses Programm zaehlt seinen eigenen Quellcode\n");

/*Pointer setzen, mit Lesen Rechten oeffnen, in Schleife bis zu EOF lesen und zaehlen*/
FILE *fd;
fd= fopen("count.c","r");
while ((fgetc(fd)) !=EOF)
nc++;
printf("%ld",nc);

/*User ergebnis lesen lassen und return geben*/
system("pause");
return 0;
}

Beim compilieren stürzt mir das Programm komplett ab, hat jemand eine Ahnung warum? (Win XP // Dev-C++)
 
Ergebins: 492....

Ka bei mir lässt es sich kompilieren und ausführen.
Heist dein Quelldatei wircklich count.c und ist im selben Verzeichnis?
Also normalerweise prüf ich wenn ich fopen benutz das handle noch auf NULL (if(fd != NULL).....) um sicher zu sein das die Datei geöffnet werden konnte. ansonsten Fehler ausgeben.
Also ich könnt mir vorstellen das es am fopen hängt...

mfg
Samy
 
:doh: Das kommt davon, wenn man nur f9 drückt, der Editor speicherte es unter cpp :(, habs manuell unter *.c gespeichert, jetzt funzt es.

Danke. *grml* Blöder Fehler ...
 
ansonsten macht sichs auch gut Dateioperationen mit try{} catch(){} zu umranden.

in C? NEIN!!
Exceptionhandling gibt es erst ab C++, wie auch OOP. Andere Unterschied ist zb auch die Speicherverwaltung:
-in c mit malloc und free
-in C++ mit new und delete

Gibt noch mehr underschiede aber die hab ich nicht alle im Kopf.

mfg
Samy
 
Ihr könntet Euch mal hierzu auslassen:
PHP:
int eingabe;

while (eingabe!=1 || eingabe!=2){
         printf("Bitte 1 oder 2 eingeben");
         scanf("%d",&eingabe);

}

Warum habe ich hier eine endlosschleife?
 
try catch gibt es auch bei Visual Basic musst ich leider bis vor Kurzem in der Schule "lernen" *g*
 
Cybo schrieb:
Ihr könntet Euch mal hierzu auslassen:
[...]
Warum habe ich hier eine endlosschleife?

hm, doppelte verneinung mit && statt || gehts :)
Du kennst de'Morgan nicht ? 8O
A? ?&? ?B? = A? ? B? bzw.
A? ??? ?B? = A? & B?
In C:
eingabe!=1 || eingabe!=2
? !(eingabe==1 && eingabe==2)

(eingabe==1 && eingabe==2) ist immer false, also ist
!(eingabe==1 && eingabe==2) immer true ;)
try catch gibt es auch bei Visual Basic musst ich leider bis vor Kurzem in der Schule "lernen" *g*
Dann aber erst im .NET ? 8O
 
Sicher kenne ich die sche... Regeln, da habe ich ne ganze Abhandlung drüber verfassen müssen, aber irgendwie war mein Kopf heute zu vollgeballert mit c ... jetzt knapp 18 Stunden am Stück immer ein Kapitel C reinhauen, bissl ablenken, c, ablenken ... ätzend.

Morgen werde ich mir an den Kopf fassen, wenn ich den Fehler sehe ;)
 
jetzt knapp 18 Stunden am Stück immer ein Kapitel C reinhauen, bissl ablenken, c, ablenken ... ätzend.
Zieh dir mal das Kapitel Zeiger rein *hrhr* :mrgreen:

So lustige Scherzchen wie
PHP:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


int main(int argc, char** argv[])
{
    float var;
    long lvar;
    char* binary=new char[35];

    // IEEE => ULONG
    /*var=9250000000000000;
    lvar=*((unsigned long*)&var); // crazy pointer stuff *hrhr**/

    // ULONG => IEEE
    lvar=1670934615;
    var=*((float*)&lvar); // crazy pointer stuff *hrhr*

    binary=_ultoa(lvar,binary,2);
    printf("Float: %f\nLong: %lu\nBinary: ",var,lvar,binary);
    for(int i=0;i<4;i++) 
    {
        for(int j=0;j<8;j++)
        {
            printf("%c",*(binary+(7-j)+8*i));
        }
        printf(" ");
    }
    getch();
    
    delete binary;
    return 0;
}
sind echt toll :ugly:
Das soll man einer in Java nachmachen :LOL:
 
Kenne ich schon, war vor 2 Stunden dran, Pointer sind absolute Fehlerquellen, ich danke den Jungs von Java, dass die den Scheiß nicht übernommen haben ;).
Die Referenzsemantik bei Objekten in Java kannst du aber mit den Pointern gleichstellen.

Wenn du in C erstmal eingearbeitet bist und die Zeiger drauf hast, wirst du sie vermissen, wenn du sie plötzlich nicht mehr hast.
Ich kann aus meiner Erfahrung sagen: Syntax, Regeln und sowas hast du in 2 Wochen drauf. Echtes Beherrschen von Zeigern geb ich dir 6 Monate, wenn du täglich dran bist ;)
 
Die Referenzsemantik bei Objekten in Java kannst du aber mit den Pointern gleichstellen.

Wenn du in C erstmal eingearbeitet bist und die Zeiger drauf hast, wirst du sie vermissen, wenn du sie plötzlich nicht mehr hast.
Ich kann aus meiner Erfahrung sagen: Syntax, Regeln und sowas hast du in 2 Wochen drauf. Echtes Beherrschen von Zeigern geb ich dir 6 Monate, wenn du täglich dran bist ;)

Mir reicht die Syntax, C ist für mich veraltet... das werde ich in Zukunft nicht beherrschen müssen *g*, meine Zukunft liegt bei Delphi, Java, C++ , Css etc ...

Klausur bestehen - nie wieder sehen ;)

Zeiger bergen aber auch ein hohes Sicherheitsrisiko, von daher stehe ich Zeigern privat sehr skeptisch gegenüber.
 
Also Try catch bei VB ist mit .Net aber seit 2003/5? dabei und zum Thema C braucht kein Mensch mehr: Sag niemals nie :biggrin:

Ich find C garnicht so blöd! Im Endeffekt denk ich aber auch wie theHacker geschrieben hat. Einmal sauber Programmieren lernen was was ist und wie welche Logik sinnvoll eingesetzt wird. Danach lernst du eine Sprache in 2 Wochen und die Feinheiten kommen mit der Zeit. Habe irgendwann mal mit GWBasic angefangen, dann Pascal, Visual Basic, Java, (html) PHP, C sauber bei einem Informatiker an der Schule gelernt (oder wohl eher den Syntax gelernt) und weil Scriptsprachen ja auch an Schulen mehr Bedeutung finden nochmal VB mit 2005 und .Net. Dreimal darfst du raten wieviel ich inzwischen für das Reinfinden in neue Sprachen brauche *g*. Aber ehrlich wenn du einmal Spass am Programmieren gefunden hast, dann ist der Syntax keine große Hürde.