我目前正在使用C ++进行整数分析,并且在比较两个字符时遇到问题。我注意到atoi()
函数将允许一个具有'+'
或'-'
字符的字符串,并且将根据该字符串的第一个字符{{1 }}或'+'
。我在比较时遇到了问题。 for循环只会检查第一个元素是否不是数字,如果不是数字,则会检查它是负数还是正数。
这是我的代码:
'-'
我遇到的问题是,当for (i; i < 20 && usrIpt[i] != '\0'; ++i) {
if (i == 0 && isdigit((unsigned char)usrIpt[0]) == 0) {
if (usrIpt[0] != '+' || usrIpt[0] != '-') {
isNumber = false;
break;
}
}
else {
if (isdigit((unsigned char)usrIpt[i]) == 0) {
isNumber = false;
break;
}
}
}
是usrIpt[0]
或'+'
时,程序没有脱离'-'
有条件的if
。 / p>
答案 0 :(得分:1)
for循环只会检查第一个元素是否不是数字,
首先,无需将此检查放入for
循环中。由于它始终是要测试的第一个字符,因此可以独立于任何循环进行此测试。如果测试通过,则根据是否有符号字符,从字符串的索引1或索引0开始数字检查循环。
第二,您对+
和-
的测试是错误的。它将始终为true
。
给出所有这些,这是您的代码的重写:
int loopstart = 0;
if ( !isdigit(usrIpt[0]) ) // not a digit, so see if it is + or -
{
loopstart = 1;
if (usrIpt[0] != '-' && usrIpt[0] != '+')
{
// this is not a number, so exit
}
}
测试完成后,您将在第一个字符或第二个字符处开始循环:
int len = strlen(usrIpt);
for (int i = loopstart; i < len; ++i ) // loopstart is either 0 or 1
{
// now check if all digits
}