문자열 temp는 내 디버거에서 "ZERO : \ t.WORD \ t1"과 같습니다. (내 파일의 첫 번째 줄)isalpha (<mychar>) == 참이면 거짓으로 평가됩니까?
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;
임시 코드의 첫 문자가 a-z, A-Z인지 확인하는 코드입니다. 첫 번째 if 문은 true로 평가되고 두 번째 문은 false로 평가됩니다. 왜?!?!?! 나는 "temp.length()> 0 & &"이 없어도 이것을 시도했지만 여전히 false를 평가합니다. 그것은 단지 "== true"를 싫어합니다. 내가 생각할 수있는 유일한 점은 isalpha()가 반환된다는 것입니다! = 0 그리고 true == 1. 그런 다음 isalpha() == 2! = 1을 얻을 수 있습니다. 그러나 C++이 그런지 전혀 모르겠습니다. 기묘한.
BTW, "== true"가 논리적으로 무의미하다는 것을 알아야 할 필요가 없습니다. 알아.
출력은
without true worked
우분투 9.10에 GNU GCC
true
을 반환하지 않습니다
는'cout과 << isalpha에 (온도 [0]) << endl의를 시도,'? –
"C++이 ... 이상하다고 생각하지 않습니다." 참조 설명서를 참조하면 아이디어를 얻을 수 있습니다. cplusplus.com은 "* c *가 알파벳 문자 인 경우"0과 다른 값 (즉, 'true')을 말합니다. 그래서 cplusplus.com을 사용하면 안됩니다 : C++에서'true'가 복사 된 C 표준의 설명에서 "true"와 같은 것을 의미하지는 않습니다. opengroup.org는 "isalpha() 함수는 c가 알파벳 문자 인 경우 0이 아닌 값을 반환해야합니다"라고 말합니다. –
또한 ''또는 ''의 isalpha 함수와 ''의 함수 템플릿'std :: isalpha '를 혼동하지 않도록주의하십시오. 후자는'bool'을 반환하기 때문에 호출하면 호출 코드가 작동합니다. –