Tôi đang học C++ và viết các chương trình nhỏ khi tôi đi cùng. Sau đây là một trong các chương trình như vậy:vòng lặp vô hạn trong 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;
}
}
Khi tôi chạy chương trình này và giữ nguyên giá trị tuyệt đối nhỏ, nó hoạt động như mong đợi. Nhưng khi tôi nhập các đầu vào lớn hơn, ví dụ: 10000000000, chương trình lặp đi lặp lại phát ra cùng một đầu ra. Một số kết hợp đầu vào gây ra hành vi thất thường. Ví dụ:
#: ./int2ch
10
10 -->
10000000000
10 -->
10 -->
10 -->
10 -->
Chương trình phun ra "10 ->" cho đến khi nó bị giết. Tôi cũng nhận thấy rằng đầu ra của các giá trị lớn được xác định bởi đầu vào pháp lý trước đó cũng như giá trị của đầu vào bất hợp pháp hiện tại.
gì đang xảy ra? (Tôi không quan tâm đến việc sửa chương trình, thật dễ dàng. Tôi muốn hiểu nó.)
Cách khác, hãy thực hiện cuộc gọi đến std :: cin.clear() để xóa trạng thái lỗi trước khi vượt qua vòng lặp tiếp theo của vòng lặp. – hark