diff options
| author | Richard Qin <richard.qin.001@gmail.com> | 2026-09-15 08:16:43 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.001@gmail.com> | 2026-09-15 08:16:43 +0800 |
| commit | 4022e5c95210631e4aceb08eaf9d9071aa5aefc4 (patch) | |
| tree | a5922559836e45fb3459a3d070367912e1035b1a /tests/functional/63_simple_atoi.sy | |
| download | rcc-master.tar.gz rcc-master.tar.xz | |
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; +} + |
