chuỗi tạm thời bằng "ZERO: \ t.WORD \ t1" từ trình gỡ lỗi của tôi. (Dòng đầu tiên của tập tin của tôi)isalpha (<mychar>) == đánh giá đúng sai?
string temp = RemoveWhiteSpace(data);
int i = 0;
if (temp.length() > 0 && isalpha(temp[0]))
cout << "without true worked" << endl;
if (temp.length() > 0 && isalpha(temp[0]) == true)
cout << "with true worked" << endl;
Đây là mã của tôi để kiểm tra xem ký tự đầu tiên của temp là một a-z, A-Z. Câu lệnh if đầu tiên sẽ đánh giá là true và câu lệnh thứ 2 là false. TẠI SAO?!?!?! Tôi đã thử điều này ngay cả khi không có "temp.length()> 0 & &" và nó vẫn đánh giá sai. Nó chỉ ghét "== true". Điều duy nhất tôi có thể nghĩ đến là isalpha() trả về! = 0 và true == 1. Sau đó, bạn có thể nhận được isalpha() == 2! = 1. Nhưng, tôi không biết nếu C++ là ... kỳ dị.
BTW, tôi không cần biết rằng "== true" là vô nghĩa về mặt logic. Tôi biết.
đầu ra là
without true worked
Biên soạn với CodeBlock sử dụng GNU GCC trên Ubuntu 9.10 (nếu điều này vấn đề có)
Các bạn đã thử 'cout << isalpha (temp [0]) << endl; '? –
"Tôi không biết nếu C++ là ... lạ". Tư vấn một hướng dẫn tham khảo sẽ cung cấp cho bạn một ý tưởng. cplusplus.com nói, "Một giá trị khác 0 (nghĩa là' true') nếu thực sự * c * là một chữ cái ". Đó là lý do tại sao bạn không nên sử dụng cplusplus.com: 'true' trong C++ không có nghĩa là" true "trong mô tả trong tiêu chuẩn C mà chúng đã sao chép từ đó. opengroup.org nói, "Hàm isalpha() sẽ trả về khác 0 nếu c là ký tự chữ cái", cái này khá hơn. –
Ngoài ra, hãy nhớ sự nhầm lẫn giữa hàm isalpha này từ ' 'hoặc' ' và mẫu hàm 'std :: isalpha' trong' '. Cái sau trả về 'bool', vì vậy nếu bạn gọi nó thì mã của bạn sẽ hoạt động. –