C++ Anfängerproblem

MCa$H

Cadet 3rd Year
Registriert
Sep. 2008
Beiträge
40
Hallo allerseits,

ich hoffe Ihr könnt mir bei meinen anfänglichen Problemen C++ zu lernen, helfen.
Undzwar möchte ich die Quersumme einer 4-stelligen Zahl berechnen.
Dieses soll einem char übergeben werden und mit Hilfe des befehls atoi in integer umgewandelt werden.
Hier der Quelltext:

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

using namespace std;
char a[4];
int QS=0;
int main(void)
{
cout << "Geben Sie bitte eine 4-stelige Zahl ein.\n" ;
cin >> a;
for (int i=0;i<5;i++)
{
QS = QS + atoi(a);
}
cout << "Die Quersumme Ihrer Zahl lautet:" << QS << " \n";
system("PAUSE");
return 0 ;

Folgende Fehlerausgaben bekomme ich dann:
13 C:\Dev-Cpp\Progs\QuersummeF.cpp invalid conversion from `char' to `const char*'
13 C:\Dev-Cpp\Progs\QuersummeF.cpp initializing argument 1 of `int atoi(const char*)'

Würde mich über Hilfestellungen freuen.
 
Der Compilerfehler kommt daher, dass atoi einen const char* erwartet, du aber einen char* übergibst. Was vielleicht einfacher wäre direkt den übergebenen String in einen Int umzuwandeln und das ganze dann auszurechnen:

Code:
#include <iostream>
#include <stdlib.h>

using namespace std;
char a[4];
int QS=0;
int main(void)
{
cout << "Geben Sie bitte eine 4-stelige Zahl ein.\n" ;
cin >> a;
int i = atoi(a);

	while(i > 0) {
		QS += i % 10;
		i /= 10;
	}

	cout << "Die Quersumme Ihrer Zahl lautet:" << QS << " \n";
	system("PAUSE");
	return 0;
}
 
Danke dir, das ist natürlich ne andere variante die mir einleuchtet.
Aber meinen Fehler verstehe ich nicht so ganz, nachgeschlagen habe ich, aber hab nichts gefunden was mir die erleuchtung bringen würde.

Wäre vielleicht jemand so nett und könnte mir das erklären? (also das mit dem const char* )
 
die art wie du cin verwendest ist mehr als nur fahrlässig.
gibt nen hübschen buffer overflow.
 
Falls dir das nicht klar sein sollte:

"const" Variablen sind solche, die nach ihrer Initialisierung nicht mehr verändert werden dürfen. Daher eben konstant. Sobald du einen const Integer Initialisiert hast und seinen Wert ändern willst gibt das einen Fehler:

Code:
const int i = 10;
i = 15 // Fehler!

Und zu der Funktion..

Dein a ist ja ein char. Und den willst du der atoi Funktion übergeben. atoi erwartet als Eingabe aber einen Pointer auf const char, was letztenendes ein String ist (-> http://tutorial.schornboeck.net/c_string.htm ) . Das übergibst du aber nunmal nicht, also gibt es eine Fehlermeldung.
 
@Mca$H:

Du solltest deine Schleife nochmal prüfen.

for (int i=0;i<5;i++)

Diese Schleife läuft 5x (0,1,2,3,4). Dein Array ist aber nur 4 Stellen groß (0,1,2,3).

Sollte das nicht der Fehler sein, wird er auf jeden Fall noch auftreten.
 
Zuletzt bearbeitet: (Korrektur)
Das 'const' spielt hier nicht die entscheidende Rolle, da du als Funktionsparameter auch variablen verwenden kannst, wenn const erwartet wird. Das heißt nur, dass dieser Wert von der Funktion selbst nicht verändert wird, was ansonsten durchaus passieren könnte, wenn der Parameter ein Pointer ist.

Das Problem ist, wie Bender86 schon sagte, dass du einen char statt eines char* an die Funktion übergibst. Hinzu kommt, dass die Funktion atoi einen string erwartet, der mit \0 abgeschlossen ist.

Du kannst nun statt atoi zu verwenden auch den Zahlenwert mit a - '0' ermitteln aber die Lösung von Bender86 ist eindeutig die beste Methode.
 
Zurück
Oben