diff options
Diffstat (limited to 'tests/functional/63_simple_atoi.sy')
| -rw-r--r-- | tests/functional/63_simple_atoi.sy | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/functional/63_simple_atoi.sy b/tests/functional/63_simple_atoi.sy new file mode 100644 index 0000000..d9a344a --- /dev/null +++ b/tests/functional/63_simple_atoi.sy @@ -0,0 +1,47 @@ +// Simple atoi program +int atoi_(int src[]) { + int s; + s = 0; + int isMinus; + isMinus = 1; + int i; + i = 0; + while(src[i] == 32) { // 跳过空白符 + i = i + 1; + } + + if(src[i] == 43 || src[i] == 45) { + if(src[i] == 45) { + isMinus = -1; + } + i = i + 1; + } else if (src[i] < 48 || src[i] > 57) { + //如果第一位既不是符号也不是数字,直接返回异常值 + s = 2147483647; + return s; + } + + while (src[i] != 0 && src[i] > 47 && src[i] < 58) { + s = s * 10 + src[i] - 48; + i = i + 1; + } + return s * isMinus; +} + +int main () { + int string[500]; + int temp; + temp = 0; + int i; + i = 0; + while (temp != 10) { + temp = getch(); + string[i] = temp; + i = i + 1; + } + string[i] = 0; + i = atoi_(string); + putint(i); + return 0; +} + |
