Zählfunktion, Debugger meckert, aber ohne konkrete Fehlermeldung?
-
Hallo,
was stimmt an diesem Programm nicht? Finde den Fehler nicht:
#include <stdio.h> void main() { char c; int i=0; while(c=getchar()=='.') i++; printf("Anzahl: %i", i); system("pause"); }
MfG
-
Meckern tut wohl der Compiler und nicht der Debugger, womit er auch Recht hat.
Hast du schon mal versucht, die Warnungen zu verstehen und dann auch zu beseitigen? Anfangen könntest du z.B. mit den Vorrangregeln von ANSI C.#include <stdio.h> main() { int c,i=0; while( (c=getchar())=='.' ) i++; printf("Anzahl: %i", i); system("pause"); return 0; }
-
Ja, hab auch schon mit den Klammern und return 0 versucht.
Der Errorlog lautet:
1>------ Build started: Project: Zähler, Configuration: Debug Win32 ------ 1>Linking... 1>LINK : fatal error LNK1104: cannot open file 'D:\Daten\z002nweb\Zähler\Debug\Zähler.exe' 1>Build log was saved at "file://d:\Daten\z002nweb\Zähler\Zähler\Debug\BuildLog.htm" 1>Zähler - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Aus einem mir unersichtlichen Grund kann die exe nicht geöffnet werden, hm..?
-
jizzer schrieb:
Aus einem mir unersichtlichen Grund kann die exe nicht geöffnet werden, hm..?
Sie läuft noch. Schau mal unten in die Taskleiste.
-
Und warum funktioniert das Programm nicht so, wie ich möchte?? Würde das gerne zum laufen kriegen
PS: Die Zähler.exe lief tatsächlich, undzwar war sie dreimal im Taskmanager gelistet und konnte nicht von mir beendet werden bis ich visual studio komplett beendet habe.
-
jizzer schrieb:
Ja, hab auch schon mit den Klammern und return 0 versucht.
Wie hast du die Klammern denn gesetzt?
Dir ist aber schon klar, was an der jetzigen Version mit der Klammerung falsch ist, oder? Kleiner Tipp. Guck mal wo die beiden von dir benutzten Operatoren stehen und was daher in deinem Programm wohgl passiert. Und vergleich das mit dem was du möchtest. Und dann verstehst du auch die Compilerwarnung (welche du hoffentlich bekommst). Ich weiß zwar nicht, was der Microsoft Compiler genau sagt, aber der GNU-Compiler sagt "8: warning: suggest parentheses around assignment used as truth value".
-
Hallo,
ja die nötigen Klammern (Vorrang von Aquivalenz über Zuordnung) haben am anfang gefehlt. Nach dem Einfügen ging es aus irgendeinem komischen Speichergrund nicht. Habe nun den Quellcode in eine neue Source kopiert und siehe da, es funktioniert.
MfG
-
jizzer schrieb:
Nach dem Einfügen ging es aus irgendeinem komischen Speichergrund nicht.
Übersetz das mal bitte auf Deutsch:
fatal error LNK1104: cannot open file 'D:\Daten\z002nweb\Zähler\Debug\Zähler.exe'
Und warum das so ist, fragst du am besten irgendjemanden, nur nicht volkard, der hat's dir nämlich schon gesagt.
-
Wutz schrieb:
Meckern tut wohl der Compiler und nicht der Debugger, womit er auch Recht hat.
Weil ein
void
fehlt? Der ist aber streng.
-
µngbd schrieb:
Wutz schrieb:
Meckern tut wohl der Compiler und nicht der Debugger, womit er auch Recht hat.
Weil ein
void
fehlt? Der ist aber streng.
Ich seh da nur ein void zu viel, standardkonform ist nämlich int main().
-
wxSkip schrieb:
Ich seh da nur ein void zu viel, standardkonform ist nämlich int main().
Naja, fast. Aber zusammen sind wir stark. Einigen wir uns auf
int main(void)
?
-
µngbd schrieb:
wxSkip schrieb:
Ich seh da nur ein void zu viel, standardkonform ist nämlich int main().
Naja, fast. Aber zusammen sind wir stark. Einigen wir uns auf
int main(void)
?
Angenommen.
Was den Punkt angeht, gehe ich einfach mal von C99 aus. (ist das eigentlich so neu, dass man das noch nicht verwendet, oder muss man sich da auch an ältere Standards halten?)
-
wxSkip schrieb:
Was den Punkt angeht, gehe ich einfach mal von C99 aus. (ist das eigentlich so neu, dass man das noch nicht verwendet, oder muss man sich da auch an ältere Standards halten?)
Man liest hin und wieder, dass sich C99 langsam durchsetzt. Andererseits will MS davon nichts wissen, und die µC-Leute (die wohl am meisten verschiedene Compiler verwenden) berichten immer wieder, dass es mit C99 schlecht aussieht. Letztlich eine Frage der Anforderungen, die man an die Portabilität stellt.
Die Sache mit der main-Signatur war übrigens in C89 genauso, glaube ich.