Schrift
[thread]1112[/thread]

Fehler im Code



<< >> 7 Einträge, 1 Seite
[E|B]
 2004-06-13 13:36
#11008 #11008
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hallo!
Ich find den Fehler in folgendem C Programm einfach nicht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>

void main() {

char txt[80];
short index, len, buch, ziff, sonst;

printf("Bitte geben Sie eine Zeichenkette ein:");
scanf("%s", txt);

for(index=buch=ziff=sonst=0; len=strlen(txt); index<len; index++){
if(txt[index] >= 'A' && txt[index] <= 'Z' || txt[index] >= 'a' && txt[index] <= 'z'){
buch++;
}else if(txt[index] >= '0' && txt[index] <= '9'){
ziff++;
}else{
sonst++;
}
}

printf("Es sind %d Buchstaben, %d Ziffern und %d sonstige Buchstaben vorhanden!", buch, ziff, sonst);

}


Bin ich blind?

Quote
012.c(12) : warning C4552: '<' : operator has no effect; expected operator with
side-effect
012.c(12) : error C2143: syntax error : missing ')' before ';'
012.c(12) : error C2059: syntax error : ')'
012.c(12) : error C2143: syntax error : missing ';' before '{'
\n\n

<!--EDIT|[E|B]|1087119477-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
steffenw
 2004-06-13 18:53
#11009 #11009
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
schreibe mal , anstatt ;
Code: (dl )
for(index=buch=ziff=sonst=0, len=strlen(txt); index<len; index++){
$SIG{USER} = sub {love 'Perl' or die};
Crian
 2004-06-13 19:11
#11010 #11010
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Es gibt kein void main(), jedenfalls nicht nach dem Standard. Das ist zwar nicht Dein eigentlicher Fehler, aber in den "echten newsgroups" würdest Du das um die Ohren gehauen bekommen ;)

Einige (=fast alle ;-) Compiler unterstützen dies zwar, aber es ist halt nicht standardkonform.

Deshalb sollte man sich int main(void) und return 0; am Ende von main angewöhnen.

Außerdem ist die von Dir verwendete leere Klammer hinter main nur unter C++ richtig, unter C muss es eigentlich korrekter Weise main(void) heißen, um eine leere Argumentenliste zu beschreiben. Es kann sein, dass das nach dem letzten Standard für C jetzt anders ist, die Änderungen habe ich leider nicht mehr mitbekommen, als ich mich mit C beschäftigt habe, war es noch so.

Aber wie gesagt, das ist nicht das eigentliche Problem, aber etwas, dass man sich vielleicht gleich richtig angewöhnen sollte, auch wenn es sogar in einigen Büchern falsch gemacht wird *seufz*.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2004-06-13 21:55
#11011 #11011
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ja, wie steffenw sagte, es hat am Komma gelegen. Jetzt seh ichs auch. :)

@Crian

Ja, das hat mir betterworld auch im ICQ schon gesagt. (Greetz to Christoph)
Muss es denn int main(void) heißen? void main() erscheint mir logischer, da so auch andere Funktionen definiert werden. Ist da main anders?
Und wieso gibst du am Ende ein false (0) zurück? Wieso nicht true (1)?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
steffenw
 2004-06-13 22:21
#11012 #11012
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
void main(void)
paßt sehr gut, wenn Du das Programm für Deine Armbanduhr neu programmieren willst.

Haßt Du ein Betriebssystem im Hintergrund, dann ist es gut, wenn Du ihm am Ende zurückgibst, daß Du ohne Fehler beendest, also
Code: (dl )
return 0;
In Perl endet man ohne Fehler auch mit
Code: (dl )
exit(0)
.

Die Rückgabe ans System unterscheidet sich von den Wahrheitsvorstellungen von Perl. Perl wollte einen einfachen und vor allem logischen Weg finden, um undef mit 0 oder q() gleichzusetzten. Aber auch ich verwende in Perl q() um fehlerfrei zu markieren, wenn die Funktion nur einen Rückgabeparameter hat, nämlich die Fehlermeldung. Das ist manchmal praktischer.
Code: (dl )
1
2
3
my $error = funktion();
$error and print($error) and exit(1);
... weiter im Programm
\n\n

<!--EDIT|steffenw|1087151035-->
$SIG{USER} = sub {love 'Perl' or die};
esskar
 2004-06-13 22:25
#11013 #11013
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es heißt

Code: (dl )
1
2
3
4
int main()
{
return 0;
}


Code: (dl )
1
2
3
4
int main(void)
{
return 0;
}


Code: (dl )
1
2
3
4
int main(int argc, char* argv[])
{
return 0;
}


das int main(void) drückt nur aus, dass die funktion keine parameter erhält... ist aber nicht mehr nötig

"return 0" setzt den errorlevel bei beendigung des programms...
dabei steht errorlevel==0 für keinen fehler und errorlevel!=0 für einen fehler...

btw. ich benutze das auch für funktionen..., wenn es mehr als zwei fehlermeldungen geben kann...

also z.b.

Code: (dl )
enum { E_SUCCESS = 0, E_ERROR, E_SPECIALERROR };
Crian
 2004-06-14 13:44
#11014 #11014
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Hmm... nach dem C-Standard (nicht der aktuelle) nach dem ich C gelernt und programmiert habe, war zwar int main() von fast allen Compilern unterstützt, aber int main(void) die eigentlich richtige Form. In C++ ist es anders, da sollte man die erste Form benutzen, da dort gerade das der richtige Weg ist, eine leere Parametermenge zu definieren.

Es kann aber gut sein, dass das nach dem neusten C-Standard inzwischen auch so ist.

Mir ist/war es bei C/C++ immer wichtig, dass mein Code nicht nur auf den Compilern läuft, auf denen ich ihn teste, sondern möglichst auf allen Standard-kompatiblen Compilern. Deshalb versuche ich immer, möglichst dicht am Standard zu bleiben.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 7 Einträge, 1 Seite



View all threads created 2004-06-13 13:36.