문자 배열을 정수로 변환해야하는 프로그램을 작성 중입니다. 그러나 양의 정수를 사용하는 대신 모든 정수 (물론 int
유형의 기능 범위)의 모든 잠재력 (예 : 양수, 음수 및 0)을 활용해야합니다. 하지만 나는 약간의 감시 가치, 즉 에 접근 할 필요가있다.int
내에서 매우 바람직하다. 나는 모든 것을 만들 필요가 없다. float
그래서 나는 그것을 피할 수 있다면, 하나의 정수가 아닌 센티넬을 사용할 수있다. C : 부호있는 정수 sentinel 값?
token
배열이) 프로그램의 나머지 그래서
int TokenToInt(char token[])
{
int current=0, value=0;
char isNeg = 'F';
if (token[current] == '-') {
isNeg = 'T';
current++;
}
while (1) {
if (isdigit(token[current]) == 0)
return -1;
else {
value *= 10;
value += token[current]-'0';
}
current++;
}
if (isNeg == 'F') return value;
if (isNeg == 'T') return -1 * (value + 1);
}
을, 당신은 오류 검사에 대한 -1
사용 , 일단 당신이 그것을 끝내면 반환 값을 음수로 증가시킵니다. 사용자가 -2^15
을 입력했지만 -1
보다 정확하게 입력 할 수없는 경우를 제외하고 어떤 작품이 맞습니까?
그러나 이것은 또한 성가신 일이며, 파란색에서 값을 무작위로 증가시키는 것은 혼란 스럽습니다. 그래서이^메소드를 고수해야합니까 아니면 동일한 작업을 수행 할 수있는 대안이 있습니까? 대안이 있다면,이 대안은 무엇입니까?
isNeg를 문자 배열로 사용하는 대신 단순히 bool 또는 int가 아닌 이유는 무엇입니까? 또한 어떤 사람들은 루틴에 하나의 리턴 만 있어야한다고 생각합니다. – Jiminion
이 코드는 while 루프에서 -1 또는 segfault를 반환하도록 바인딩됩니다. – msam
@Jim isNeg는 일반적인 char 값입니다 ...? –