Beenden eines Eingabestreams mit einem angegebenen Zeichen, z. B. '|'?
Lerne gerade C ++, Neuling.
Ich habe ein Problem beim Beenden der Eingabe mit dem '|' Zeichen, mein Programm springt zum Ende / Ende und erlaubt keine weitere Eingabe. Ich glaube, das liegt daran, dass std :: cin aufgrund der Eingabe eines Zeichens bei der Erwartung eines int in einem Fehlerzustand ist. Deshalb habe ich versucht, std :: cin.clear () und std :: cin.ignore () zu verwenden, um das zu löschen Geben Sie den Rest des Programms aus und lassen Sie ihn laufen, aber ich kann ihn immer noch nicht knacken.
int main()
{
std::vector<int> numbers{};
int input{};
char endWith{ '|' };
std::cout << "please enter some integers and press " << endWith << " to stop!\n";
while (std::cin >> input)
{
if (std::cin >> input)
{
numbers.push_back(input);
}
else
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
}
}
Übergeben Sie den Vektor dann an eine Funktion, um x-mal zu durchlaufen und jedes Element zu einer Gesamtsumme hinzuzufügen. Das Programm überspringt jedoch immer die Benutzereingaben:
std::cout << "Enter the amount of integers you want to sum!\n";
int x{};
int total{};
std::cin >> x;
for (int i{ 0 }; i < x; ++i)
{
total += print[i];
}
std::cout << "The total of the first " << x << " numbers is " << total;
Bitte helfen Sie!
Antworten
Wenn die Verwendung ein "|" (oder irgendetwas, das kein ist int), die Schleife endet und die Fehlerbehandlung innerhalb der Schleife wird nicht ausgeführt. Verschieben Sie den Fehlercode einfach außerhalb der Schleife. Außerdem lesen Sie stdinzweimal, wodurch jeder andere int übersprungen wird.
while (std::cin >> input) {
numbers.push_back(input);
}
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Hinweis: Wenn Sie speziell nach "|" suchen möchten kann sich zu so etwas ändern:
while (true) {
if (std::cin >> input) {
numbers.push_back(input);
}
else {
// Clear error state
std::cin.clear();
char c;
// Read single char
std::cin >> c;
if (c == '|') break;
// else what to do if it is not an int or "|"??
}
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');