Quersummenprogramm
-
Hi ich habe folgendes Problem ich soll nen Programm schreiben, was die Quersumme bilden soll.
Ich hab mir also folgendes Programm erdacht:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int feld[20]; int erg=0; int n=0; int main() { printf("Bitte Geben Sie eine beliebige Zahl ein\n"); scanf("%i",&feld); for(n=0; n<sizeof(feld); n++) { erg=erg+feld[n]; printf("%i\n",erg); // nur zur überprüfung } printf("%i\n",erg); return 0; }
Problem ist das ich nicht die Quersumme erhalte.
Bei quersumme von 12 zb erhalte ich nicht 3 sondern als endwert irgendeine komische zahl, nur warum ist das so? Ich kann den fehler nicht finden.
-
Hi,
ich bin zwar kein C Programmierer, aber ich würde mal sagen du liest hier
scanf("%i",&feld);
deine eingegebene Zahl in feld[0] ein.
D.h. du addierst hier
erg=erg+feld[n];
zu "erg" irgendwelche nicht initialisierten Werte dazu.
-
&feld kannst du bei strings benutzen bzw. chararrays
wenn du so die quersumme ausrechnen willst dann musst du deine eingabe als string eingeben und dann jedes element berechnen [0] , [1] usw.
ah und nochwas dein array ist immer 80 !
du hast ja dein feld mit 20 int´s initialiersiert als 20*4 = 80, das ist kein variabler wert
-
Hi,
ich würde wohl so vorgehen:
Die Zahl in char-Array 'str' einlesen (fgets) Für jedes Element in 'str' Konvertiere das Element in ein int (schau dir ne ASCII-Tabelle dafür an) Erhöhe die Gesamtsumme um den aktuellen int-Wert Gib Summe aus
Im Übrigen stimmt die Schleifenbedingung nicht. sizeof(feld) wird nicht 20 zurückliefern. sizeof(feld)/sizeof(int) hätte geklappt, aber besser ist, wenn du ne Konstante SIZE definierst, und dann die für's Array und die Schleife hernimmst.
So. Ablauf hast du, jetzt musst du's nur noch nach C bringen. Versuch's mal, bevor hier einer die Komplettlösung postet...
-
Also ich weis nicht wie ich das auf jedes elemnetim feld beziehen soll , ich kann nur ne einzelnen teil des feldes mit - '0' bzw 48 in nen int umwandeln bei der ausgabe.
Krieg das nicht in ne schleife rein.#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> char feld[20]; int erg; int n=0; int x; int main() { printf("Bitte Geben Sie eine beliebige Zahl ein\n"); gets(feld); printf("%s\n",feld); printf("%i\n",feld[0] -'0'); printf("%i\n",feld[1] -'0'); for(n=0; n<sizeof(feld);n++) { x=feld[n] - '0'; erg=erg+x; printf("%i",erg); }
return 0;
}
-
vielleicht solltest du (a) nur bis
strlen(feld)
gehen (sizeof wird dir IMMER 20 liefern, egal wie lang die eingegebene Zahl wird - und dann addierst du undefinierte Speicherwerte auf deine Quersumme drauf) und (b) mit isdigit() kontrollieren, ob du überhaupt eine Ziffer in der Hand hältst.PS: Und ausgeben mußt du dein Ergebnis erst hinter der Schleife.
-
Also bin jetzt soweit
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> char feld[20]; int erg=0; int n; int x; int main() { printf("Bitte Geben Sie eine beliebige Zahl ein\n"); gets(feld); printf("%s\n",feld); printf("%i\n",feld[0] -'0'); printf("%i\n",feld[1] -'0'); for(n=0; n<strlen(feld);n++) { x=feld[n] - '0'; erg=erg+x ; printf("%i",erg ); } printf("%i",erg); return 0; }
Was is dieses digit?
Irgendwie bekomme ich immer noch nur mist als ausgabe.wenn ich zb 123 eingebe bekomm ich statt 3 , 1366 als ausgabe...
-
isdigit: http://www.cppreference.com/stdstring/isdigit.html
wenn ich zb 123 eingebe bekomm ich statt 3 , 1366 als ausgabe...
Das stimmt wohl beides nicht
-
Eventuell solltest du auch das printf() aus der Schleife rausnehmen - in Wahrheit schreibt dir das Programm nämlich gar nicht "1366", sondern nacheinander die Zwischenergebnisse "1", "3", "6" und das Endergebnis "6".
PS: Und Variablen darfst du auch IN der main()-Funktion definieren.
-
achja , stimmt an einfaches \n vergessen bin ich garnicht gekommen.
Die printf da drinnen war nur zu test zwecken.manchmal siehtman echt den wald vor lauter bäumen nicht...
edit:
Also habs hinbekommen^^
Das fertige Programm lautet:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main() { char feld[20]; int erg=0; int n; int int_feld; float div_erg; printf("Bitte Geben Sie eine beliebige Zahl ein\n"); printf("0 zum Beenden\n"); gets(feld); if(feld[0] != 0) { for(n=0; n<strlen(feld);n++) { int_feld=feld[n] -'0'; erg=erg+int_feld ; } printf("Die Quersumme lautet %i\n",erg); div_erg= (float) erg/3; printf("Die Division durch 3\nergibt %.2f\n",div_erg); if(erg%3 ==0) { printf("Also ist die Zahl durch 3 teilbar\n"); } else { printf("Also ist die Zahl nicht durch 3 teilbar\n"); } } return 0; }
-
Ja, das sieht schonmal nicht schlecht aus. Nur einige Anmerkungen:
- die Abfrage
if(feld[0]!=0)...
prüft nicht, ob der Nutzer "0" eingegeben hat, sondern fängt eine leere Eingabe ab. - nimm statt gets() lieber fgets(), damit kannst du scherstellen, daß du nicht über deinen Speicher hinauschreibst.
- die Abfrage