C++ Kreditkartennummer überprüfen

F

freeak2305

Hallo,

ich soll eine Programm schreiben, in dem eine Kreditkartennummer überprüft werden soll. Dazu gibt es einen Algorithmus.

Problem: Ich habe überhaupt keinen Plan wie, wo und warum. Habe mir jetzt hier was zusammengebastelt,. aber das scheint nicht das Gelbe vom Ei zu sein. Bricht ab mit "Run-Time Check Failure #2 - Stack around the variable 'Feld' was corrupted." Und die Ausgaben am Ende stimmen auch nicht.....glaube ich.

Könnt Ihr bitte einmal drüberschauen?
Code:
// Kreditkarte.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{

	char Feld[16];
	int zahl = 15;
	
	cout << "Bitte Kreditkartennummer eingeben:" << endl;
	cout << endl;

	cin >> Feld;
	cout << endl;


	
	int zw1 = 0, zw2 = 0, zw3 = 0, zwges = 0;
	int pruefziffer, rest;
	

	for(int i = 0; i == zahl; i++)											
		{															
											
	
			if ((i == 0) || (i == 2) || (i == 4) || (i == 6) || (i == 8) || (i == 10) || (i == 12) || (i == 14))
				{
					zw3 = Feld[i] * 2;								
					
				}
			else
				{
					zw2 = zw2 + Feld[i];						
				}
		}

		zwges = zw1 + zw2;							

		rest = zwges % 10;
		pruefziffer = 10 - rest;

		
		
	if(Feld[15]=pruefziffer)
	{
			cout << "Dies ist eine moegliche Kreditkartennummer" << endl;
	}
	else
	{
					cout << "Dies ist keine moegliche Kreditkartennummer!" << endl;
	}
	
	cin.ignore();
	getchar();
	return 0;

}
 
Schreib doch bitte deinen Code in cpp-tags, danke :D

Zudem ist
C++:
Feld[15]=pruefziffer
eine Zuweisung und keine Pruefung wie du es in der if vor hast. Zahlen vergleichen mit ==
 
So, bin nun angemeldet. Sorry, das sich den Code nicht richtig formatiert habe


Ich hab das mal mit nem "==" gemacht, aber da ist immernoch dieser nervige "Stack Fehler".
 
Als Gast kannst du keine Beitraege bearbeiten? Hm, falls net, poste den code bittenochmal in tags, dann wirds einfacher zu lesen. Danke
 
Code:
//Kreditkarte.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{

	char Feld[16];
	int zahl = 15;
	
	cout << "Bitte Kreditkartennummer eingeben:" << endl;
	cout << endl;

	cin >> Feld;
	cout << endl;


	
	int zw1 = 0, zw2 = 0, zw3 = 0, zwges = 0;
	int pruefziffer, rest, einer, zehner;
	

	for(int i = 0; i == zahl; i++)											
		{															
											
	
			if ((i == 0) || (i == 2) || (i == 4) || (i == 6) || (i == 8) || (i == 10) || (i == 12) || (i == 14))
				{
					zw3 = Feld[i] * 2;				
				}
			else
				{
					zw2 = zw2 + Feld[i];						
				}
		}

		zwges = zw1 + zw2;							

		rest = zwges % 10;
		pruefziffer = 10 - rest;

		
		
	if(Feld[15]==pruefziffer)
	{
			cout << "Dies ist eine moegliche Kreditkartennummer" << endl;
	}
	else
	{
					cout << "Dies ist keine moegliche Kreditkartennummer!" << endl;
	}
	
	cin.ignore();
	getchar();
	return 0;

}
 
Moin,

hat zwar nichts mit Deinem konkreten Problem zu tun, aber statt
Code:
for( int i = 0; i == zahl; i++ )

besser
C++:
for( int i = 0; i <= zahl; i++ )


So, und das Fehlermeldung von der Variablen "feld " spricht, vermute ich mal, dass hier irgendwo der Knackpunkt ist:
C++:
char Feld[16];
int zahl = 15;
...
cin >> Feld;

Mal davon angesehen, dass vlt. String etc. pfiffiger wäre, würde ich mal versuchen, NACH dem Einlesen die Variable mit
Code:
feld[] 15 = 0;
zu terminieren !


gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
:offtopic: Evtl mit der IP ^^
Sind zwar immer noch keine cpp-tags, aber schonma besser als nix ;)

Ich bin net so fit in cpp aber gehts nicht schon schief weil char Feld[16]; nicht initialisiert ist?
 
Hi.
:offtopic: Evtl mit der IP ^^
Sind zwar immer noch keine cpp-tags, aber schonma besser als nix ;)

Ich bin net so fit in cpp aber gehts nicht schon schief weil char Feld[16]; nicht initialisiert ist?
Nein, in C/C++ muß man Variablen nicht initialisieren.

Und schließlich wird dann auch in die Variable eingelesen (@vfl_freak: und auch automatisch terminiert).

Aber, der C-String feld kann max 15 Buchstaben speichern - da C-Strings mit \0 terminiert sind. Falls man 16 Zeichen eingibt, schreibt man über die Feldgrenze hinaus -> Stackkorruption.
C++:
char feld[17];
Es wäre allerdings durchaus besser std::strings zu verwenden.

Gruß
 
Zurück