Uczę się języka C++ i piszę małe programy, kiedy się z nimi zgadzam. Poniżej zamieszczona jest jeden taki program:nieskończona pętla w C++
// This program is intended to take any integer and convert to the
// corresponding signed char.
#include <iostream>
int main()
{
signed char sch = 0;
int n = 0;
while(true){
std::cin >> n;
sch = n;
std::cout << n << " --> " << sch << std::endl;
}
}
Kiedy uruchomić ten program i utrzymanie nakładów na stosunkowo małych wartościach bezwzględnych, to zachowuje się zgodnie z oczekiwaniami. Ale kiedy wprowadzę większe wejścia, np. 10000000000, program będzie powtarzalnie wyprowadzał to samo wyjście. Niektóre kombinacje wprowadzania powodują błędne zachowanie. Na przykład:
#: ./int2ch
10
10 -->
10000000000
10 -->
10 -->
10 -->
10 -->
Program wypluwa "10 ->", dopóki nie zostanie zabity. (Przy tej konkretnej sekwencji wejść wyjście programu zmienia się niepoprawnie.) Zauważyłem również, że wynik dużych wartości jest określony przez poprzedni legalny sygnał wejściowy, a także wartość bieżącego nielegalnego wejścia.
Co się dzieje? (Nie dbam o naprawianie programu, to jest łatwe. Chcę to zrozumieć.)
Alternatywnie, wywołaj wywołanie std :: cin.clear(), aby usunąć stan błędu przed następnym przejściem pętli. – hark