Brauche Hilfe bei einen Programm
-
Hallo,
ich hab hier ein Programm zur berechnung der EAN-Prüfziffer geschrieben.
Doch leider zeigt mir der Compiler noch irgendwo ein Fehler an.
Könnt ihr mir weiterhelfen was ich da falsch gemacht habe?Gruss
Johannes#include<stdio.h> void main() { int Nutzziffer1, Nutzziffer2, Nutzziffer3, Nutzziffer4, Nutzziffer5, Nutzziffer6, Nutzziffer7; int Pruefziffer; int SummeEinzelProdukte; int modulo10; printf("Nutzziffer1 eingeben: "); scanf("%i" ,&Nutzziffer1); printf("Nutzziffer2 eingeben: "); scanf("%i" ,&Nutzziffer2); printf("Nutzziffer3 eingeben: "); scanf("%i" ,&Nutzziffer3); printf("Nutzziffer4 eingeben: "); scanf("%i" ,&Nutzziffer4); printf("Nutzziffer5 eingeben: "); scanf("%i" ,&Nutzziffer5); printf("Nutzziffer6 eingeben: "); scanf("%i" ,&Nutzziffer6); printf("Nutzziffer7 eingeben: "); scanf("%i",&Nutzziffer7); SummeEinzelProdukte=Nutzziffer1*3+Nutzziffer2*1+Nutzziffer3*3+Nutzziffer4*1+Nutzziffer5*3+Nutzziffer6*1+Nutzziffer7*3; modulo10=SummeEinzelProdukte10; Pruefziffer=(10-modulo10)%10; printf("DiePruefziffer ist: %i \n",Pruefziffer); }
-
Hallo
Doch leider zeigt mir der Compiler noch irgendwo ein Fehler an.
Ahja. Und sollen wir nun raten, wo wlecher Fehler auftritt?
Denn deinen unformatierten Quellcode wird sich keiner anschauen.
bis bald
akari
-
rofl, irgendwo einen fehler?
und wie wärs, wenn du den mal mit hier rein postest?dann gehört das wohl ins Ansi C Forum, da ich hier kein C++ erkennne kann!
-
Johannes1983 schrieb:
Doch leider zeigt mir der Compiler noch irgendwo ein Fehler an.
Das ist noch nicht vage genug. Könntest du etwas weniger spezifisch sein?
-
Es fehlt wohl ein
int SummeEinzelProdukte10;Trotzdem würde ich das Programm nochmal überarbeiten.
-
..bzw die 10 muss vielleicht da weg.
[notiz]
Ich muss mir mein Kennwort wiederholen
[/notiz]
-
SciFi->N/A schrieb:
Es fehlt wohl ein
int SummeEinzelProdukte10;Trotzdem würde ich das Programm nochmal überarbeiten.
Hallo,
sorry ich weiss noch nocht wie man den Quellcode hier richtig rein bringt!
Es fehlte ein % Zeichen hinter dem Produkte. Jetzt klappt das Programm.Gruss
JohannesEDIT: Ok hab herausgefunden wie das mit dem Quellcode hier einfügen funktioniert

-
Ok, jetzt hab ich mal noch eine Frage zu den Schleifen!
Und zwar hab ich in meinen jetzigen Programm den Algorithmus
SummeEinzelProdukte=Nutzziffer1*3+ Nutzziffer2*1+ Nutzziffer3*3+ Nutzziffer4*1+ Nutzziffer5*3+ Nutzziffer6*1+ Nutzziffer7*3;Es werden also alle Nutzziffern abwechselnd mit 3 und 1 multipliziert!
Wie kann ich sowas als Schleife schreiben? Den ich hab vor das Programm für mehrere Nutzziffern zu schreiben und möchte nicht z.B. 27mal Nutzzifferxx*27 zu schreiben

Ich hab mir das irgendwie so vorgestellt. Scheitere aber leider an der Umsetzung.
if(nutzziff==3) nutzziff=1; else nutzziff=3;Könnt ihr mir auch hier weiterhelfen?
Danke
-
du nimmst ein feld an nutzziffern, und in der schleife dann
if(akt_ziffer%2) summe += ziffern[akt_ziffer] *3; else summe += ziffern[akt_ziffer] *1;es gibt auch kompaktere schreibweisen, aber ich denke die sind zu kompliziert für dich
-
Dazu mußt du deine Ziffern in ein Array (bzw. einen std::vector) packen. Und dann geht das so:
int Summe = 0; for (int i=0; i<Nutzziffer.size(); i+=2) Summe += Nutzziffer[i] * 3; for (int i=1; i<Nutzziffer.size(); i+=2) Summe += Nutzziffer[i] * 1;Im übrigen ist
void main()
falsch. Es muß
int main()
heißen.
Edit: Zu langsam und suboptimal. Arrrg!
-
Ähem du meinst wohl jede ungerade Stelle wird mit 3 multipliziert, oder was erhoffst du dir von den *1 Multiplikationen?
mach es so:
#include <numeric> //für std::accumulate int main() { const size_t anzahlZiffern = 13; int ean[ anzahlZiffern ]; for( int i = 0; i < anzahlZiffern; ++i ) if( i % 2 == 0 ) ean[ i ] *= 3; int sum = std::accumulate( ean, ean + anzahlZiffern, 0 ); int checkdigit = ( 10 - sum % 10 ) % 10; //wenn ich deinen Codeauszug richtig interpretiere }
-
Vielen Dank für eure Antworten. Ich versuche es mal umzusetzen

-
Z2 schrieb:
Dazu mußt du deine Ziffern in ein Array (bzw. einen std::vector) packen. Und dann geht das so:
int Summe = 0; for (int i=0; i<Nutzziffer.size(); i+=2) Summe += Nutzziffer[i] * 3; for (int i=1; i<Nutzziffer.size(); i+=2) Summe += Nutzziffer[i] * 1;Im übrigen ist
void main()
falsch. Es muß
int main()
heißen.
Edit: Zu langsam und suboptimal. Arrrg!
Gibt es sowas auch für den "printf" Befehl?
Also so das ich nicht z.B. 21 malprintf("Nutzziffer1 eingeben: ");
scanf("%i" ,&Nutzziffer1);für 21 Eingaben schreiben muss? Es soll also variieren und nicht durch den Programmieren festgelegt werden!
Edit: Ok hab selber im Buch nachgeschaut und bin auf folgende Lösung gekommen um mir das Einlesen der Daten zu erleichtern!
printf("Bitte Nutzziffern eingeben: \n"); for(i=0; i<n; i++) scanf("%i",&Nutzziffer[i]);
-
Bräuchte wohl noch ein wenig unterstützung von euch! Bin inzwischen beim Kapitel Schleifen gekommen, doch hab ich an einigen Stellen noch Probleme

#include<stdio.h> int main() { int Nutzziffer[13]; int Pruefziffer, SummeEinzelProdukte, modulo10; int i,ean_nr,anzahl_nziffern; printf("EAN-Code-Nr. =? (8 oder 13 eingeben)"); scanf("%i",&ean_nr); anzahl_nziffern=ean_nr-1; printf("Es werden nun %i Ziffern eingelesen.\n\n",anzahl_nziffern); //Einlesen der Nutzziffern { printf("Bitte Nutzziffern eingeben: \n"); for(i=0; i<anzahl_nziffern; i++) scanf("%i",&Nutzziffer[i]); } //Der Algorithmus (Alle Zahlen sollen abwechseln mit 3 und 1 multipliziert werden) { if (Nutzziffer[i]%2) SummeEinzelProdukte += Nutzziffer[i] *3; else SummeEinzelProdukte += Nutzziffer[i] *1; } modulo10=SummeEinzelProdukte % 10; Pruefziffer=(10-modulo10) % 10; //Ausgeben des EAN-Codes mit Prüfziffer char Text[]="Der EAN-Code ist: %i \n" ,Pruefziffer";; printf("%s",Text); }Visual C++ 6.0 zeigt mir leider noch 4 Fehler und 1 Warnung!

error C2001: Zeilenumbruch innerhalb einer Konstanten
error C2143: Syntaxfehler : Fehlendes ';' vor 'string'
error C2371: 'Pruefziffer' : Neudefinition; unterschiedliche Basistypen
Siehe Deklaration von 'Pruefziffer'
error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'printf'
warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
-
char Text[]="Der EAN-Code ist: %i \n" ,Pruefziffer";;
Diese Zeile kannst du so nicht verwenden, du müsstest die Prüfziffer mittels snprintf einfügen..
-
printf("DiePruefziffer ist: %i \n",Pruefziffer);Das muss %d heissen bei Integer!
Gruß Alex