Vektoren addieren
-
Hallo Leute,
ich habe als Aufgabe bekommen mit C++ ein Programm zur Addition von zwei Vektoren zu schreiben. Allerdings funktioniert es nicht. Könnt ihr mir sagen wo der Fehler liet?Hier der Quelltext:
#include<stdio.h>
int main(void)
{
int i;int feld1[2]= {};
int feld2[2]= {};
int Summe[2]= {};for (i=0; i<3; i++)
{
scanf("%d\n", feld1[i]);
}for(i=0;i<3;i++)
{
scanf("%d\n", feld2[i]);
}for(i=0; i<3; i++)
{
Summe[i]=feld1[i]+feld2[i];
printf("%d\n",Summe[i]);
}
}Viele Grüße,
Martin
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89, C99 und C11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das ist C, kein C++.
Was funktioniert nicht? Fehlermeldung? Symptome?
Wenn du Quellcode postest, dann benutz bitte die Formatierungstags (zu finden unter dem Editorfenster)
Lies dir bitte den ersten Link in meiner Signatur gründlich durch.
Du benutzt übrigens scanf in mehrfacher Weise falsch. Guck dir nochmal an, wie das geht. Dies ist wahrscheinlich der Fehler, den du meinst. Dass ich ihn sehe, heißt aber nicht, dass du nicht trotzdem eine brauchbare Fehlerbeschreibung abgeben sollst.
Setz die Warnoptionen deines Compilers auf Maximum, behandle Warnungen wie Fehler. Den Fehler hätte dein Compiler nämlich auch selber gefunden, er durfte bloß nicht mit einem Fehler abbrechen, weil du zufällig einen technisch richtigen Funktionsaufruf für scanf geschrieben hast (der bloß absolut keinen Sinn macht).
-
Hallo Martin,
Wenn es geht, bitte den Code in Code Tags setzten. die sehen so aus:
[.code="cpp"]
Hier ist der Code. Den Punkt (.) oben weglassen !
[/code]Das sind keine Vektoren die du verwendest wenn ich mich nicht irre. Zumindest kenne ich Vektoren als dies hier:
vector<datentyp> name;
Könnte natürlich auch falsch liegen...Es ist immer ganz gut bei so einem Programm eine kleine Eingabeaufforderung zu geben, dann weiß der nichtwissende Benutzer auch was er eingeben soll.
Desweiteren wäre es nett wenn du das, was nicht funktioniert näher beschreibst, nicht einfach nur "geht nicht".
Mir scheint das generell C, nicht C++ zu sein, denn Vectoren gibt es ja auch nicht in C wenn ich mich nicht irre...
Ich kann nicht direkt helfen, aber ich glaube da stimmt etwas mit den Typen nicht. z.B. bei "%d" und Feld1[i], ... scheint es Probleme zu geben. Und warum das "\n" noch neben "%d"?
Eine Tipp für den Anfang noch wäre, nach jedem Schritt etwas einfaches wie "Check 1" etc. ausgeben zu lassen. Dann siehst du, an welcher Stelle in deinem Programm etwas nicht passt.
Vom der Idee her sah das meiner Meinung nach aber ganz gut aus
mfg
HarteWareEdit: Da war ich wohl zu langsam :p
-
SeppJ schrieb:
Das ist C, kein C++.
Eher C mit einem C++-Compiler übersetzt (siehe unnötige Array-Initialisierung).
Martin T schrieb:
scanf("%d\n", feld1[i]);
Entferne \n. Siehe die Antwort hier: http://c-faq.com/stdio/scanfhang.html
-
Hey, danke für die fixe Antwort!
Es werden weder Fehler noch Warnungen im Quelltext gefunden. Wenn ich auf run klicke öffnet sich das schwarze Fenster. Wenn ich eine Zahl eingebe kriege ich eine Fehlernachricht...
Was ist bei scanf denn falsch? Entschuldige bitte die Frage, ich hab nur eine Unterrichtseinheit C/C++ hinter mir und bin noch nicht so ganz auf dem Damm
Viele Grüße,
Martin
-
SeppJ schrieb:
Das ist C, kein C++.
Es ist sowohl gültiges C als auch gültiges C++, aber eher ist es C++, weil es für C ein return 0 am Ende der main() braucht.
@Martin T: Wie viele Elemente haben in
int feld1[2]= {};
wohl Platz?
Wahrscheinlich 2 oder?
for (i=0; i<3; i++) { scanf("%d\n", feld1[i]); }
Hier greifst du aber auf 3 Elemente zu; das kann nicht gut gehen.
-
EinGast schrieb:
SeppJ schrieb:
Das ist C, kein C++.
Eher C mit einem C++-Compiler übersetzt (siehe unnötige Array-Initialisierung).
Martin T schrieb:
scanf("%d\n", feld1[i]);
Entferne \n. Siehe die Antwort hier: http://c-faq.com/stdio/scanfhang.html
Hey, sorry hab deine Antwort zu spät geesehen. Ich habe es ohne \n benutzt, das hat allerdings nicht viel gebracht.
-
Ich habe dein Programm etwas umgeschrieben. Es sollte jetzt funktionieren, Kommentare sind im Code
#include <stdio.h> int main(void) { int i; /* Dein Index i laeuft von 0 bis 2, also muessen die Arrays Groesse 3 haben (oder du laesst i nur von 0 bis 1 laufen) */ int feld1[3]; int feld2[3]; int summe[3]; for (i = 0; i < 3; i++) { /* scanf will einen Pointer auf die Variable, in der der Input gespeichert werden soll. Deshalb ist das &, in diesem Kontext der Addressoperator, davor*/ scanf("%d", &feld1[i]); } for (i = 0; i < 3; i++) { scanf("%d", &feld2[i]); } for (i = 0; i < 3; i++) { summe[i] = feld1[i] + feld2[i]; printf("%d\n", summe[i]); } return 0; }
*Edit
Anstattscanf("%d", &feld1[i]);
kannst du auch
scanf("%d", feld1 + i);
schreiben. Im persoenlich bevorzuge die letztere Variante aber das ist Geschmackssache. Wahrscheinlich ist die erste Variante einfacher zu verstehen, da man dazu keine Pointer-Arithmetik braucht.
-
Vielen herzlichen Dank!
-
EinGast schrieb:
Eher C mit einem C++-Compiler übersetzt (siehe unnötige Array-Initialisierung).
dammbruch schrieb:
Es ist sowohl gültiges C als auch gültiges C++, aber eher ist es C++, weil es für C ein return 0 am Ende der main() braucht.
C99 sag ich. Oder wahrscheinlich: Ein weiterer Fehler im Programm .
(Ja, wahrscheinlich ist es trotzdem mit einem C++-Compiler übersetzt. Aber an diesen Punkten sieht man das nicht)