programm gibt komische zeichen als ausgabe
-
hallo
hab hier ein programm geschrieben, welches 2 arrays liest und diese zu einem neuen array macht aber ohne die Zeichen zu wiederholen. in diesem fall sind es Buchstaben
also z.B. A[6]=A B J D E F
B[5}=B I E F Gals ergebnis muss ich das hier bekommen
hier weiß ich nicht, welche zahl ich in array eingeben muss. hab mir aber gedacht die zahl 11 wäre richtig
C [11] =A B J D E F I Ghier mein programm
# include <iostream.h> // ich weiß hier muss es iostream heißen ohne .h void main () /* hier muss es auch int main heißen aber von mir wird es halt so verlangt. da kann ich nichts machen. hab dem lehrer das schon mal gesagt, aber hab nur eine unverschämte antwort von dem bekommen. ^^ */ { char A[6]; char B[5]; int t=0; char C[11]; int counter=0; for (int i=0;i<6;i++) cin>>A[i]; for (i=0;i<5;i++) cin>>B[i]; for (i=0;i<4;i++) { for (int j=0;j<6;j++) { if (B[i]==A[j]) counter++;} if (counter==0) {C[t]=B[i]; t++; counter=0;} } for (i=0;i<6;i++) cout << A[i]; for (i=0;i<=t;i++) cout <<C[i]; }in diesem bild befindet sich der fehler
http://s14.directupload.net/file/d/2912/ldopzrgh_png.htm
vilen dank für eure antworten
-
Kompiliert bei mir nicht:
fatal error C1083: Datei (Include) kann nicht geöffnet werden: "iostream.h": No such file or directory.Sowas würde ich Deinem Lehrer dann man an den Kopf knallen.
-
Der Fehler liegt in Zeile 15. Mach ne 5 draus, dann sollte es gehen.
Jedoch lernst du Mist, Tachyon hats schon angesprochen.
gruß
syntax
-
Ausserdem muss das counter=0; aus der if-Bedingung raus.
P.S.: welchen Compiler verwendet ihr eigentlich?
-
__cu schrieb:
Ausserdem muss das counter=0; aus der if-Bedingung raus.
P.S.: welchen Compiler verwendet ihr eigentlich?
Bei dem, was man so von Schulen mitbekommt, ist das bestimmt entweder Dev-C++ mit dem dazugehörenden uralt-Compiler oder eine
Raubkopie von VS6.
-
Und außerdem:
#include <iostream.h>, void main(), using namespace std fehlt( oder direkt gleich std::cin, std::cout), Stilistisch nicht schön(Einrückung und Klammern),...
Wo wird dir das unterrichtet? UNI?
gruß
syntax
-
Bei der Ausgabe muss es auch noch
i < theißen, nichti <= t. Mit diesen drei Fehlern (Zeilen 15, 24 und 28) ist es dann (für deinen Compiler) richtig.Ist eigentlich noch niemandem aufgefallen, was hier mit dem i getrieben wird? Gültigkeitsbereich? Das ist auch so etwas, was kein Nach-2000-Compiler mehr schlucken wird.
-
SeppJ schrieb:
Ist eigentlich noch niemandem aufgefallen, was hier mit dem i getrieben wird? Gültigkeitsbereich? Das ist auch so etwas, was kein Nach-2000-Compiler mehr schlucken wird.

Habs gesehen, aber durch die Fehlerüberhäufung vergessen aufzuzählen.
gruß
syntax
-
vielen dank erstmal für eure antworten
also zu den compiler.. ich benutze microsoft visual c++ 6.0
hatte mir glaub ich das vs10 geholt und ihr habt recht. das vs10 konnte keines dieser programme "verstehen"hab die zeilen (15 24 28) verändert. wenn ich aber die zeile 28 verändere, dann wird der befehl von zeile 28-29 nicht ausgeführt. bekomme dann nur das A[6] array
also das hier (A B C D E F)die komischen zeichen sind immer noch da

noch ein paar ideen?
-
Zeig mal den Code nach der Änderung.
-
# include <iostream.h> void main () { char A[6]; char B[5]; int t=0; char C[11]; int counter=0; for (int i=0;i<6;i++) cin>>A[i]; for (i=0;i<5;i++) cin>>B[i]; for (i=0;i<5;i++) { for (int j=0;j<6;j++) { if (B[i]==A[j]) counter++;} if (counter==0) {C[t]=B[i]; t++; } } for (i=0;i<6;i++) cout << A[i]; for (i=0;i<t;i++) // wenn ich hier aber das = weggmache, wird diese schleife ignoriert cout <<C[i]; }
-
In Zeile 24 solltest du das Rücksetzen des counters außerhalb des if-Blocks ziehen, nicht komplett entfernen. In Zeile 28 solltest du aus dem <= ein < machen, nicht das = entfernen. Antworten bitte genau lesen.
-
tut mir leid. hab zu schnell gelesen
ist das jetzt so richtig?
# include <iostream.h> void main () { char A[6]; char B[5]; int t=0; char C[11]; int counter=0; for (int i=0;i<6;i++) cin>>A[i]; for (i=0;i<5;i++) cin>>B[i]; for (i=0;i<5;i++) { for (int j=0;j<6;j++) { if (B[i]==A[j]) counter++;} if (counter==0) {C[t]=B[i]; t++; } counter=0; } for (i=0;i<6;i++) cout << A[i]; for (i=0;i<t;i++) cout<<C[i]; }das problem ist aber immer noch da
-
Du hast da was nicht mit dem GÜLTIGKEITSBEREICH einer Variablen verstanden.
Es fehlt in jeder Schleife eine DEFINITION einer neuen Variablen, da die Variable in der ersten Schleife seinen Gültigkeitsbereich verlässt(dies ist die einzige Variable "i", die du DEFINIERST.
Abhilfe: Organisier deinen Code besser, indem du IMMER Klammern setzt und diese auch SINNVOLL setzt und deine EINRÜCKUNG immer gleich machst.
gruß
syntax
-
Es sieht auf den ersten Blick richtig (im Sinne deines Uraltcompilers) aus, ist bei deiner Einrückung schwer zu sehen. Funktioniert es denn?
-
Ich weiß nicht inwiefern du Gültigkeitsbereiche gelernt hast, aber sie sind durchaus wichtig für die Organisation eines Codes.
Beispiel:void foo() { int i=10; //lokale Variable { int i=20; //lokalere Variable std::cout<<i; //hier wird 20 ausgegeben }//hier verlässt das lokalere i den güligkeitsbereich std::cout<<i; //hier wird 10 ausgegeben }//ab hier existiert kein i mehr std::cout<<i; //Autsch!Dein Code:
for (int i=0;i<6;i++) // neue Schleifenvar. i cin>>A[i]; for (i=0;i<5;i++) // hier fehlt das int cin>>B[i];Vielleicht klarer warum Klammern wichtig für den Anfang sind?

gruß
syntax
-
vom Gültigkeitsbereiche habe ich noch nie was gehört und um ehrlich zu sein, habe ich es nicht so ganz verstanden.
mir ist dieses problem noch nie vorgekommen obwohl ich mal ein programm geschrieben habe, wo ich eine (5x5 matrix die summe jeder reihe und jeden block ausrechnen muss) da habe ich 3 for schleifen die nur int i und int j beinhalten.aber es hatte ohne probleme geklappt. werde es in meinem nächsten post zeigen.hab das jetzt so gemacht sieht zwar voll dumm aus aber es funktioniert endlich.
# include <iostream.h> void main () { char A[6]; char B[5]; int t=0; char C[11]; int counter=0; for (int i=0;i<6;i++) cin>>A[i]; for (int k=0;k<5;k++) cin>>B[k]; for (int h=0;h<5;h++) { for (int l=0;l<6;l++) { if (B[h]==A[l]) counter++;} if (counter==0) {C[t]=B[h]; t++; } counter=0; } for (int p=0;p<6;p++) cout << A[p]; for (int w=0;w<t;w++) cout<<C[w]; }vielen dank für eure hilfe
-
hier das 5x5 matrix das ich gerade erwähnt habe
( falss es jemanden interessiert ^^)# include <iostream.h> void main () { int A[5][5]; int sum=0; for (int i=0;i<5;i++) for (int j=0;j<5;j++) cin>> A[i][j]; for ( i=0;i<5;i++) // warum bekomme ich hier den fehler error C2374: 'i' : redefinition; multiple initialization { for (int j=0;j<5;j++) // aber hier nicht sum=sum+A[i][j]; cout<<sum; sum=0;} for (int j=0;j<5;j++) // genauso hier auch nicht { for (int i=0;i<5;i++) // in zeile 11 habe ich den fehler bekommen aber hier nicht. kann mir das jemand erklären? sum=sum+A[i][j]; cout<<sum; sum=0;} }
-
Ich behaupte mal: Compilerfehler. Ist, wie du hoffentlich gemerkt hast, nicht der einzige

Dein Matrizenprogramm ist übrigens ein Musterbeispiel für sinnentstellende Einrückung. Hast du keinen Editor der für dich automatisch einrückt? Ach nein! Du benutzt ja die Technik von vorvorvorgestern.
-
peter16 schrieb:
warum bekomme ich hier den fehler error C2374
Nach Zeile neun sind
iundjGeschichte, in Zeile elf willst Du aber trotzdem einibenutzen.Wenn hier Leute auf deiner Einrückung herumreiten ist das keine Pedanterie, sondern ein wirklich guter Rat.
Wenn Du deinen Code ordentlich einrückst (und auch auf deine Klammern achtest) dann springen einem solche Fehler geradezu ins Gesicht.