Fehler mit atoi und std Befehle in C++

Jackiechan

Grünschnabel
Hallo Leute hab , wieder mal ein kleines Problem :

Hab mir dein Buch über C++ mit Cd gekauft und , die dort angegebenen Beispiele auch gleich ausprobiert.
Nur funktionieren dies Beispiele jetzt nicht .
Die fertige Exe Datei von der Cd funktioniert , aber wenn ich den selbt geschriebenen Code eingebe , oder die Quell Datei von der Cd nähme wirft er mir immer eine fehler meldung aus : Das atoi kein Element von Std ist .
Was mache ich falsch


Code:
#include <iostream>
#include <cstdlib>

int main()
{


	char Buffer[20];

	std::cout <<" Geben Sie eine Zahl ein : " << std::flush;
	std::cin.get(Buffer, sizeof(Buffer));
	if (std::atoi(Buffer) < 100)
	{
	std::cout <<" Die eingegebene Zahl ist kleiner als 100 " << std::endl;
	}

}

Mfg
Jackie
 

Endurion

Erfahrenes Mitglied
Ich hab mir mal den cstdlib-Header vorgenommen, der sollte sich eigentlich darum kümmern, dass atoi im std-Namespace ist.

Frage: Ist das ganze in einer .c oder .cpp-Datei gespeichert?
Visual Studio unterscheidet nämlich üblicherweise nach der Extension, ob es als C oder C++ kompiliert. Und bei C wird atoi nicht in den Namespace gepackt.

(Falls ich kompletten Unsinn fasele, darf ich (nur) innerhalb dieses Threads ge-flamed werden. Danke)
 

Kachelator

Peter Jerz
Du schreibst "std::atoi". Das ist falsch. atoi() ist kein Mitglied des Namespaces std. Die Inkludierung von <cstdlib> anstelle von <stdlib.h> sollte das eigentlich ändern, aber aus irgendeinem Grund scheint es nicht zu funktionieren.

Hier würde es sich anbieten, am Beginn der Funktion ein "using namespace std;" einzusetzen und auf die ganzen "std::" zu verzichten.

---
Ha, Endurion war schneller! :)

Übrigens würden cout und cin nicht funktionieren, wenn der Compiler das für C hielte. Die Extension ist egal. *flame* ;)
 
Zuletzt bearbeitet:

Jackiechan

Grünschnabel
Original geschrieben von Endurion
Frage: Ist das ganze in einer .c oder .cpp-Datei gespeichert?
Visual Studio unterscheidet nämlich üblicherweise nach der Extension, ob es als C oder C++ kompiliert. Und bei C wird atoi nicht in den Namespace gepackt.

Ist eine .cpp Datei

Ich hab auch ein using namespace std; eingefügt aber dann funktioniert es aber trotzdem nicht.

Mfg
Jackie
 

Jackiechan

Grünschnabel
So bin doch noch drauf gekommen , und hab den Fehler entdeckt :

Code:
]#include <iostream>
#include <cstdlib>

int main()
{
	 
  char Buffer[20];

  std::cout << "Geben Sie eine Zahl ein: " << std::flush;
  std::cin.get(Buffer, sizeof(Buffer));
        
  {
    std::cout << "Sie haben eine Zahl kleiner als 100 eingegeben." << std::endl;
  }
}

Hab in " if (std::atoi(Buffer) < 100) " das std:: vor atoi entfernt und jetzt klappt es.


Danke noch mals für eure Hilfen.

Mfg
Jackie
 

Kachelator

Peter Jerz
Code:
#include <iostream>
#include <cstdlib>
int main()
{
  using namespace std; 

  char Buffer[20];

  cout <<" Geben Sie eine Zahl ein : " << flush;
  cin.get(Buffer, sizeof(Buffer));
  if (atoi(Buffer) < 100)
  {
   cout <<" Die eingegebene Zahl ist kleiner als 100 " << endl;
  }
  return 0;
}

Auch nicht so? Nebenbei, der return-Wert fehlte noch.

---
Huch, ich war zu langsam.
 

Endurion

Erfahrenes Mitglied
Ich kann's mir nicht verkneifen:

:mad: using namespace std; *zurückflame*

Ist aber völlig ok, wenn man kleinere Projekte hat bzw. davon ausgeht, dass keine anderen Namespaces dazwischenfunken.

Flixt, gibt keinen "Wieher"-Smiley