接收键盘输入,将输入字符转为整数
目标
编写函数 getInt 方法接收键盘输入,将字符流转为整数。
要求:
-
需要返回转换后的整数。 到达结尾时返回文件结束标记。
设计:
-
形参为指向 int 类型的指针 p,存储整数。 当到达结尾时返回 -1,否则返回正值。
int getInt(int *pn) { 跳过与数字表达式无关的字符; if (字符 = -) 符号为负; 获取 - 或 + 的下一个字符 c; if (c 不是数字) 跳到第一行执行; while (若 c 是数字) { *pn = 10 * *pn + (c - 0); 获取下一个字符 c; } if (符号为负) *pn = -(*pn); return c; }
#include <stdio.h> int getch(void); void ungetch(int); int getInt(int*); int isSpace(int); int isDigit(int); int getInt(int *pn) { int c; skip:while (!isDigit(c = getch()) && c != EOF && c != - && c != +); int sign = (c == -) ? -1 : 1; if (c == - || c == +) c = getch(); if (!isDigit(c) && c != EOF) { ungetch(c); goto skip; } for (*pn = 0; isDigit(c); c = getch()) { *pn = *pn * 10 + (c - 0); } *pn *= sign; if (c != EOF) ungetch(c); return c; } int isSpace(int c) { if (c == || c == ) { return 1; } return 0; } int isDigit(int c) { if (c >= 0 && c <= 9) { return 1; } return 0; } #define BUFSIZE 100 static int buf[BUFSIZE]; static int size = 0; int getch(void) { return size > 0 ? buf[--size] : getchar(); } void ungetch(int c) { if (size < BUFSIZE) { buf[size++] = c; } else { printf("ungetch: too many characters %c ", c); } } int main() { int n = 10; int arr[n]; for (int i = 0; i < n && getInt(&arr[i]) != EOF; i++) { } for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } }
书中代码:
#include <ctype.h> #include <stdio.h> int getch(void); void ungetch(int); int getInt(int*); int main() { int n = 10; int arr[n]; for (int i = 0; i < n && getInt(&arr[i]) != EOF; i++) { } for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } } int getInt(int *pn) { int c, sign; while (isspace(c == getch())); if (!isdigit(c) && c != EOF && c != + && c != -) { ungetch(c); return 0; } sign = (c == -) ? -1 : 1; if (c == + || c == -) c = getch(); for (*pn = 0; isdigit(c); c = getch()) { *pn = 10 * *pn + (c - 0); } *pn *= sign; if (c != EOF) ungetch(c); return c; }
下一篇:
Java接入使用chatgptapi案例