aboutsummaryrefslogtreecommitdiff
path: root/tests/sysy_lvX/046_simple_atoi.sy
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sysy_lvX/046_simple_atoi.sy')
-rw-r--r--tests/sysy_lvX/046_simple_atoi.sy47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/sysy_lvX/046_simple_atoi.sy b/tests/sysy_lvX/046_simple_atoi.sy
new file mode 100644
index 0000000..d9a344a
--- /dev/null
+++ b/tests/sysy_lvX/046_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;
+}
+