[C] Hilfe, Aufgabe läuft nicht.
-
bool Contains(int vek[],int eingabe,int laenge) { for(int i=0;i<laenge;i++) //durchlaufe das array { if(vek[i]==eingabe)//ist das N-Element identisch mit der eingabe { return true; // dann gebe ja zurueck } } return false; //ansonsten nein } int main(void) { //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0} int vektor[10] = {}; //hilfsvariable fuer eingabe int eingabe; //zahlen abfragen und fuellen for(int i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++) { printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n"); scanf("%i",&eingabe);//benutzer eingabe einlesen //ueberpruefen ob zahl bereits eingegeben wurde if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0]))) { printf("Ausgabe: %i \n",eingabe); vektor[i]=eingabe; } //else // printf("%i wurde breits eingegeben\n",eingabe); } return 0; }
Hallo und Guten Tag,
Ich habe ein wirklich großes Problem!
In meiner Schule habe ich eine Aufgabe bekommen, wo ich ein Programm schreiben soll, das 10 Zahlen einliest und jede Zahl ausgibt, die mit keiner der vorhergehenden Zahlen übereinstimmt. Dazu sollen wir einen Vektor verwenden! Außerdem sollen wir beachten, dass im ungünstigsten Fall alle 10 Zahlen verschieden sind.Nun habe ich mich drangesetzt und dieses oben geschriebene Programm geschrieben.
Ich wollte dies laufen lassen, jedoch, kommen viele Fehlermeldungen:C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(1) : error C2061: Syntaxfehler : Bezeichner 'Contains'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(1) : error C2059: Syntaxfehler : ';'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(1) : error C2059: Syntaxfehler : 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(17) : error C2059: Syntaxfehler : '}'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2065: 'i' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(23) : error C2059: Syntaxfehler : ')'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(24) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(26) : warning C4013: 'scanf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(29) : warning C4013: 'Contains' undefiniert; Annahme: extern mit Rueckgabetyp intJetzt weiß ich nicht wieso der diese Fehlermeldungen gibt, denn eigentlich bin ich mir sicher, dass das programm laufen sollte, denn ich habe auch versucht, die Meldungen zu beheben aber irgendwie klappt es dann auch nicht.
Kann es sein dass mein Programm zu alt ist, so komig es auch klingt? Daran kann es nicht liegen, denn in der Schule benutzen wir Microsoft VISUAL C++ 6.0 .
-
C kennt keinen eigenen Datentypen für bool und folglich auch kein true oder false.
In C müssen Variablen am Blockanfang deklariert werden. Die Deklaration der Laufvariabel in einer for-Schleife ist auch nicht möglich. Auch diese Variablen müssen am Blockanfang deklariert werden.Beheb diese Fehler zunächst und dann schau mal weiter.
-
was gkjhkhjkhj sagen wollte:
schreib mal statt:
bool int
true 1
false 0und
int i; for(i=0;
statt
for(int i=0;
-
Falls ihr aber in der Schule so ein hässliches C++ beigebracht bekommt (welches eigentlich mehr C ist), dann kann es schon reichen, wenn du die Datei von Main.c in Main.cpp umbenennst.
Du solltest dir aber im klaren sein, dass der Code definitv kein C++ ist und nur als solcher compiliert wird.
-
Welcher Compiler wird eingesetzt?
In aktuellen C-Compilern gibt es sehr wohl den Datentyp bool, auch wenn dieser intern schlicht auf int umgesetzt wird. Genauso steht es mit false und true, die auf 0 und 1 gesetzt werden. Und Typdeklarationen in einer for-Schleife sollten heute auch überall erlaubt sein.
-
Also soll ich das bool komplett weglassen bzw. dies hier:
bool Contains(int vek[],int eingabe,int laenge) { for(int i=0;i<laenge;i++) //durchlaufe das array { if(vek[i]==eingabe)//ist das N-Element identisch mit der eingabe { return true; // dann gebe ja zurueck } } return false; //ansonsten nein }
-
Ich benutze Microsoft Visual C++ 6.0 eine alte Version.
-
Du musst statt bool zB ein int verwenden, die werden ähnlich behandelt. Wenn ein int-Ausdruck gleich 0 ist, ist das äquivalent zu false, ansonsten true.
Also:int a = ... if (!a) { ... } //a == 0 if (a) { ... } //a != 0
-
hallo D-U-D-E,
Danke für die Antwort aber ich bin noch nicht lange bei C dabei und deshalb hab ich jetzt Schwierigkeiten dieses Bool so zu ändern wie du geschrieben hast.
Irgendwie will das nich im Kopf klick machen
-
int Contains(int vek[], int eingabe, int laenge) { int i; for (i = 0; i <laenge; i++) //durchlaufe das array { if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe { return 1; // dann gebe ja zurueck } } return 0; //ansonsten nein }
-
Wenn dein älterer C-Compiler das nicht machen will, dann benutze eigene Makros mit:
#define bool int; #define false 0; #define true 1:
Viel anders machen die anderen Compiler das auch nicht.
-
Das bool kannst du ersetzen mit:
typedef unsigned bool; bool false = 0; bool true = !false;
Variablen dürfen in C89 nur am Funktionsanfang deklariert werden.
Kommentare sind nur als Blockkommentare erlaubt
/* Kommentar */
-
Besser wäre es noch die Werte durch ein
const
vor dem versehentlichen Überschreiben zu schützen.const bool false = 0; const bool true = !false;
true
undfalse
als Makro auszuführen hat allerdings den Vorteil, du kannst die Werte nicht mit Konstanten/Variablen gleichen Namens verstecken.
-
#ifdef __cplusplus #error ich weiss nicht was ich tue #endif typedef int bool; enum {false,true}; bool Contains(int vek[],int eingabe,int laenge) { int i; for( i=0;i<laenge;i++) //durchlaufe das array { if(vek[i]==eingabe)//ist das N-Element identisch mit der eingabe { return true; // dann gebe ja zurueck } } return false; //ansonsten nein }
-
Ahaa!
Also sowie es llll gemacht hat ist aber auch ok oder?
Dann habe ich immernoch Fehler im "anderen" Stück.
int main(void) { //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0} int vektor[10] = {}; //hilfsvariable fuer eingabe int eingabe; //zahlen abfragen und fuellen for(int i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++) { printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n"); scanf("%i",&eingabe);//benutzer eingabe einlesen //ueberpruefen ob zahl bereits eingegeben wurde if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0]))) { printf("Ausgabe: %i \n",eingabe); vektor[i]=eingabe; } //else // printf("%i wurde breits eingegeben\n",eingabe); } return 0; }
Wenn ich dort die Fehler ausmerzen möchte, dann bleiben immernoch Fehler in diesem Teil.
-
Lass mich raten, der Fehler den du uns nicht mitteilen willst ist in Zeile 10 und besagt, dass das int da nicht hin darf?
-
Ich bin echt nich bei der Sache dabei, Viel zu Nervös. Tut mir Leid.
int Contains(int vek[], int eingabe, int laenge) { int i; for (i = 0; i <laenge; i++) //durchlaufe das array { if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe { return 1; // dann gebe ja zurueck } } return 0; //ansonsten nein } int main(void) { //ein 10stelliges array erstellen und es {} leer initialisieren ( d.h. an jeder stelle steht 0} int vektor[10] = {}; //hilfsvariable fuer eingabe int eingabe; //zahlen abfragen und fuellen for(int i=0;i<sizeof(vektor)/sizeof(vektor[0]);i++) { printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n"); scanf("%i",&eingabe);//benutzer eingabe einlesen //ueberpruefen ob zahl bereits eingegeben wurde if(!Contains(vektor,eingabe,sizeof(vektor)/sizeof(vektor[0]))) { printf("Ausgabe: %i \n",eingabe); vektor[i]=eingabe; } //else // printf("%i wurde breits eingegeben\n",eingabe); } return 0; }
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(19) : error C2059: Syntaxfehler : '}'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2065: 'i' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2059: Syntaxfehler : ')'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(26) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(27) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(28) : warning C4013: 'scanf' undefiniert; Annahme: extern mit Rueckgabetyp int
Fehler beim Ausführen von cl.exe.Dies kommt, wenn ich das Programm laufen lassen will. In der Tat unter anderem auch in Zeile10. Aber ich denke, das hängt nicht nur wegen der Zeile 10 ab oder doch?
-
#include <stdio.h> #include <stdlib.h> int Contains(int vek[], int eingabe, int laenge) { int i; for (i = 0; i <laenge; i++) //durchlaufe das array { if (vek[i] == eingabe)//ist das N-Element identisch mit der eingabe { return 1; // dann gebe ja zurueck } } return 0; //ansonsten nein } int main(void) { int vektor[10]; int eingabe, i, len; for (i = 0; i < 10; ++i) { vektor[i] = 0; } len = sizeof(vektor)/sizeof(*vektor); //zahlen abfragen und fuellen for (i=0;i< len;i++) { printf("Geben Sie eine Zahl ein und bestaetigen sie mit ENTER\n"); scanf("%d", &eingabe);//benutzer eingabe einlesen //ueberpruefen ob zahl bereits eingegeben wurde if (Contains(vektor,eingabe,len)) { printf("%d wurde breits eingegeben\n", eingabe); } else { printf("Ausgabe: %d\n", eingabe); vektor[i] = eingabe; } } return 0; }
Der Visual C++ 6 ist so dermaßen veraltet. Vielleicht klappt der Code so, aber vielleicht auch nicht. Ein aktueller Compiler schafft es jedenfalls.
-
pcjr schrieb:
Ich bin echt nich bei der Sache dabei, Viel zu Nervös. Tut mir Leid.
Musst du nicht. Nur auch mal die Tipps ansehen, wenn man sie dir schon auf dem goldenen Tablett serviert.
pcjr schrieb:
Dies kommt, wenn ich das Programm laufen lassen will. In der Tat unter anderem auch in Zeile10. Aber ich denke, das hängt nicht nur wegen der Zeile 10 ab oder doch?
Nicht alle, aber fast.
pcjr schrieb:
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(19) : error C2059: Syntaxfehler : '}'
Hier scheint er Probleme mit deiner leeren Klammer zu haben. Lasse sie weg, ohne Elemente hat sie auch keine Wirkung.
pcjr schrieb:
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ')' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2065: 'i' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : warning C4552: '<' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(25) : error C2059: Syntaxfehler : ')'
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(26) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'All das dürfte verschwinden, wenn du int i; an den Funktionsanfang schreibst.
pcjr schrieb:
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(27) : warning C4013: 'printf' undefiniert; Annahme: extern mit Rueckgabetyp int
C:\Programme\Microsoft Visual Studio\MyProjects\jh\jh.c(28) : warning C4013: 'scanf' undefiniert; Annahme: extern mit Rueckgabetyp intDu wirst vergessen haben stdio.h zu inkludieren.
-
Jawoll es läuft aber was hast du hier gemacht?
int eingabe, i, len;
UNd eimal hier:
if (Contains(vektor,eingabe,len))
-
Variablen deklariert und die Länge des Arrays in len gespeichert:
len = sizeof(vektor)/sizeof(*vektor);