鱼C论坛

 找回密码
 立即注册
查看: 1728|回复: 6

[已解决]用getch()来替换scanf()

[复制链接]
发表于 2019-12-3 22:20:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写自定义整数输入函数

函数原型为:int inputInt(int min, int max);

说明:入参min和max分别表示该函数输出的最小和最大值。

功能基本要求:

在windows操作系统下,使用codeblocks做为开发工具。函数实现过程中,只能使用getch()做为键盘的输入,不得使用scanf、gets之类的系统函数。以回车键结束输入,对于不符合要求的输入提供合理的解决方法,支持退格键,支持16进制输入(以0x或0X开始,16进制支持a-f和A-F),对于10进制方式的输入,不能以0开始输入。

调用示例:

    int x;

    x = inputInt(1, 500);

输入示例:

    输入“123<回车>”,则函数返回整数123

    输入“0x123<回车>”,则函数返回整数291
最佳答案
2019-12-4 01:30:40
本帖最后由 jackz007 于 2019-12-4 01:46 编辑
  1. #include <stdio.h>
  2. #include <conio.h>

  3. inputInt(void)
  4. {
  5.         char c , s[82]                                                                          ;
  6.         int a , d , e , k , m                                                                   ;
  7.         bool f                                                                                  ;

  8.         for(m = 0 ; (c = getch()) != 0x0d && m < 81 ;) {
  9.                 if(c == 8) {
  10.                         if (m) {
  11.                                 printf("\b \b")                                                 ;
  12.                                 s[m - 1] = 0x00                                                 ;
  13.                                 m --                                                            ;
  14.                         }
  15.                 } else {
  16.                         s[m ++] = c                                                             ;
  17.                         printf("%c" , c)                                                        ;
  18.                 }
  19.         }
  20.         printf("\n")                                                                            ;
  21.         for(; (s[m - 1] == 0x09 || s[m - 1] == 0x20) && m > 0 ; s[m -- - 1] = 0)                ;
  22.         for(e = 0 ; (s[e] == 0x09 || s[e] == 0x20) && e < m ; e ++)                             ;
  23.         for(k = e ; k < m + 1 ; k ++) s[k - e] = s[k]                                           ;
  24.         m -= e                                                                                  ;
  25.         e = 0                                                                                   ;
  26.         if(m > 0) {
  27.                 if(m > 1 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
  28.                         if(m > 2) {
  29.                                 for(f = true , k = 2 ; k < m && f ; k ++) {
  30.                                         if(s[k] >= '0' && s[k] <= '9') d = s[k] - '0'           ;
  31.                                         else if(s[k] >= 'a' && s[k] <= 'f') d = 10 + s[k] - 'a' ;
  32.                                         else if(s[k] >= 'A' && s[k] <= 'F') d = 10 + s[k] - 'A' ;
  33.                                         else f = false                                          ;
  34.                                         if(f) e = e * 16 + d                                    ;
  35.                                 }
  36.                                 if(! f) e = 0                                                   ;
  37.                         }
  38.                 } else {
  39.                         a = 0                                                                   ;
  40.                         if(s[a] == '-') a ++                                                    ;
  41.                         if(m > a) {
  42.                                 if(s[a] != '0') {
  43.                                         for(f = true , k = a ; k < m && f ; k ++) {
  44.                                                 if(s[k] >= '0' && s[k] <= '9') d = s[k] - '0'   ;
  45.                                                 else f = false                                  ;
  46.                                                 if(f) e = e * 10 + d                            ;
  47.                                         }
  48.                                         if(! f) e = 0                                           ;
  49.                                         else if(a) e = -e                                       ;
  50.                                 }
  51.                         }                        
  52.                 }
  53.         }
  54.         return e                                                                                ;
  55. }

  56. main(void)
  57. {
  58.         int d              ;
  59.         d = inputInt()     ;
  60.         printf("%d\n" , d) ;
  61. }
复制代码

        编译运行实况:
  1. C:\Bin>g++ -static -o getint getint.c

  2. C:\Bin>getint
  3.                                 0x123
  4. 291

  5. C:\Bin>getint
  6.                         123
  7. 123

  8. C:\Bin>
复制代码


        inputInt() 可以自动去掉输入数字过程中输入的前导以及尾随的空格及 TAB 字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-4 01:30:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-12-4 01:46 编辑
  1. #include <stdio.h>
  2. #include <conio.h>

  3. inputInt(void)
  4. {
  5.         char c , s[82]                                                                          ;
  6.         int a , d , e , k , m                                                                   ;
  7.         bool f                                                                                  ;

  8.         for(m = 0 ; (c = getch()) != 0x0d && m < 81 ;) {
  9.                 if(c == 8) {
  10.                         if (m) {
  11.                                 printf("\b \b")                                                 ;
  12.                                 s[m - 1] = 0x00                                                 ;
  13.                                 m --                                                            ;
  14.                         }
  15.                 } else {
  16.                         s[m ++] = c                                                             ;
  17.                         printf("%c" , c)                                                        ;
  18.                 }
  19.         }
  20.         printf("\n")                                                                            ;
  21.         for(; (s[m - 1] == 0x09 || s[m - 1] == 0x20) && m > 0 ; s[m -- - 1] = 0)                ;
  22.         for(e = 0 ; (s[e] == 0x09 || s[e] == 0x20) && e < m ; e ++)                             ;
  23.         for(k = e ; k < m + 1 ; k ++) s[k - e] = s[k]                                           ;
  24.         m -= e                                                                                  ;
  25.         e = 0                                                                                   ;
  26.         if(m > 0) {
  27.                 if(m > 1 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
  28.                         if(m > 2) {
  29.                                 for(f = true , k = 2 ; k < m && f ; k ++) {
  30.                                         if(s[k] >= '0' && s[k] <= '9') d = s[k] - '0'           ;
  31.                                         else if(s[k] >= 'a' && s[k] <= 'f') d = 10 + s[k] - 'a' ;
  32.                                         else if(s[k] >= 'A' && s[k] <= 'F') d = 10 + s[k] - 'A' ;
  33.                                         else f = false                                          ;
  34.                                         if(f) e = e * 16 + d                                    ;
  35.                                 }
  36.                                 if(! f) e = 0                                                   ;
  37.                         }
  38.                 } else {
  39.                         a = 0                                                                   ;
  40.                         if(s[a] == '-') a ++                                                    ;
  41.                         if(m > a) {
  42.                                 if(s[a] != '0') {
  43.                                         for(f = true , k = a ; k < m && f ; k ++) {
  44.                                                 if(s[k] >= '0' && s[k] <= '9') d = s[k] - '0'   ;
  45.                                                 else f = false                                  ;
  46.                                                 if(f) e = e * 10 + d                            ;
  47.                                         }
  48.                                         if(! f) e = 0                                           ;
  49.                                         else if(a) e = -e                                       ;
  50.                                 }
  51.                         }                        
  52.                 }
  53.         }
  54.         return e                                                                                ;
  55. }

  56. main(void)
  57. {
  58.         int d              ;
  59.         d = inputInt()     ;
  60.         printf("%d\n" , d) ;
  61. }
复制代码

        编译运行实况:
  1. C:\Bin>g++ -static -o getint getint.c

  2. C:\Bin>getint
  3.                                 0x123
  4. 291

  5. C:\Bin>getint
  6.                         123
  7. 123

  8. C:\Bin>
复制代码


        inputInt() 可以自动去掉输入数字过程中输入的前导以及尾随的空格及 TAB 字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-4 12:16:56 | 显示全部楼层
        for(; (s[m - 1] == 0x09 || s[m - 1] == 0x20) && m > 0 ; s[m -- - 1] = 0)                ;
        for(e = 0 ; (s[e] == 0x09 || s[e] == 0x20) && e < m ; e ++)                             ;
        for(k = e ; k < m + 1 ; k ++) s[k - e] = s[k]                                           ;代没太看懂了,可而且段代码在codeblocks编译通过不了,但还是很感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-4 17:13:37 | 显示全部楼层
本帖最后由 bin554385863 于 2019-12-4 22:11 编辑
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5. #include <stdlib.h>
  6. #include <ctype.h>
  7. int inputInt()
  8. {
  9.     int result = 0, ct = 0, sz = 2;
  10.     char f = '0';
  11.     char *str = (char *)malloc(sizeof(char) * sz);
  12.     while ((f = getch()) != '\r') //使用用动态数组存储读取的字符
  13.     {
  14.         str[ct] = f;
  15.         putch(f);//回显
  16.         ct++;
  17.         char *tmp = (char *)malloc(sizeof(char) * (sz + ct));
  18.         tmp[sz + ct - 1] = '\0';
  19.         strcpy(tmp, str);
  20.         free(str);
  21.         str = tmp;
  22.     }
  23.     printf("\n");
  24.     char res[strlen(str) + 2];
  25.     res[0] = '+';
  26.     res[strlen(str)] = '\0';
  27.     if (str[0] == '-')
  28.     {
  29.         strcpy(res, str);
  30.     }
  31.     else
  32.     {
  33.         strcat(res, str);
  34.     }
  35.     free(str);
  36.     if (res[0] == '+') //如果是正数
  37.     {
  38.         if (res[1] == '0' && (res[2] == 'x' || res[2] == 'X')) //如果是16进制数
  39.         {
  40.             for (size_t i = 3; i < strlen(res); i++)
  41.             {
  42.                 if (isdigit(res[i]) || ((res[i] >= 'a') && (res[i] <= 'f')) || (res[i] >= 'A' && res[i] <= 'F'))
  43.                 {
  44.                     if (isupper(res[i]))
  45.                     {
  46.                         res[i] = (char)(58 + res[i] - 'A');
  47.                     }
  48.                     else if (islower(res[i]))
  49.                     {
  50.                         res[i] = (char)(58 + res[i] - 'a');
  51.                     }
  52.                 }
  53.                 else
  54.                 {
  55.                     perror("ERROR");
  56.                     exit(1);
  57.                 }
  58.                 result = result * 16 + (res[i] - 48);
  59.             }
  60.         }
  61.         else //如果是10进制数
  62.         {
  63.             for (size_t i = 1; i < strlen(res); i++)
  64.             {
  65.                 if (!isdigit(res[i]))
  66.                 {
  67.                     perror("ERROR");
  68.                     exit(1);
  69.                 }
  70.                 else
  71.                 {
  72.                     result = result * 10 + (res[i] - 48);
  73.                 }
  74.             }
  75.         }
  76.     }
  77.     else if (res[0] == '-') //如果是负数
  78.     {
  79.         if (res[1] == '0' && (res[2] == 'x' || res[2] == 'X')) //如果是16进制数
  80.         {
  81.             for (size_t i = 3; i < strlen(res); i++)
  82.             {
  83.                 if (isdigit(res[i]) || ((res[i] >= 'a') && (res[i] <= 'f')) || (res[i] >= 'A' && res[i] <= 'F'))
  84.                 {

  85.                     if (isupper(res[i]))
  86.                     {
  87.                         res[i] = (char)(58 + res[i] - 'A');
  88.                     }
  89.                     else if (islower(res[i]))
  90.                     {
  91.                         res[i] = (char)(58 + res[i] - 'a');
  92.                     }
  93.                 }
  94.                 else
  95.                 {
  96.                     perror("ERROR");
  97.                     exit(1);
  98.                 }
  99.                 result = result * 16 + (res[i] - 48);
  100.             }
  101.             result = -result;
  102.         }
  103.         else //如果是10进制数
  104.         {
  105.             for (size_t i = 1; i < strlen(res); i++)
  106.             {
  107.                 if (!isdigit(res[i]))
  108.                 {
  109.                     perror("ERROR");
  110.                     exit(1);
  111.                 }
  112.                 else
  113.                 {
  114.                     result = result * 10 + (res[i] - 48);
  115.                 }
  116.             }
  117.             result = -result;
  118.         }
  119.     }
  120.     return result;
  121. }
  122. int main(int argc, char const *argv[])
  123. {
  124.     int x = inputInt();
  125.     printf("%d", x);
  126.     return 0;
  127. }
复制代码

==================================================
E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-amcrwj1k.g4k --stdout=Microsoft-MIEngine-Out-34ojn3ac.qyj --stderr=Microsoft-MIEngine-Error-lmt4kyln.wpk --pid=Microsoft-MIEngine-Pid-n005cbfs.inj --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
123
123

E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-pmbslost.gwc --stdout=Microsoft-MIEngine-Out-xfshvka4.qiy --stderr=Microsoft-MIEngine-Error-yph4nrau.az3 --pid=Microsoft-MIEngine-Pid-rb14fg1b.pdj --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
-123
-123

E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-atgvy5or.llj --stdout=Microsoft-MIEngine-Out-bwe3hyko.wok --stderr=Microsoft-MIEngine-Error-311wjcni.l4e --pid=Microsoft-MIEngine-Pid-sr4c5jcp.ccq --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
0x123
291

E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-sin3opxt.nyb --stdout=Microsoft-MIEngine-Out-a0fbswkr.b5g --stderr=Microsoft-MIEngine-Error-30dxkm0p.h2s --pid=Microsoft-MIEngine-Pid-nm2t0sdj.2bh --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
-0x123
-291

E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-g1lrueul.yhg --stdout=Microsoft-MIEngine-Out-lnjuzxo5.muv --stderr=Microsoft-MIEngine-Error-wxti4a10.xew --pid=Microsoft-MIEngine-Pid-iswgkr3q.4lz --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
lk00
ERROR: No error


E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-teqodghs.ovy --stdout=Microsoft-MIEngine-Out-lrgunujb.g0t --stderr=Microsoft-MIEngine-Error-mneikxwz.koj --pid=Microsoft-MIEngine-Pid-i2gs0wvy.q3u --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
136l
ERROR: No error


E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-yil3vgkk.odh --stdout=Microsoft-MIEngine-Out-zsfp2ehb.0q0 --stderr=Microsoft-MIEngine-Error-00f454g2.5fu --pid=Microsoft-MIEngine-Pid-pw3cpvdv.fvf --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
0xa
10

E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-znatdx5t.ggl --stdout=Microsoft-MIEngine-Out-ngm1id0g.njp --stderr=Microsoft-MIEngine-Error-pdufa5ld.foa --pid=Microsoft-MIEngine-Pid-grtfoskv.aoo --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
-0xF
-15

E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-ov1xvfy5.oq3 --stdout=Microsoft-MIEngine-Out-mlidmuhj.t2c --stderr=Microsoft-MIEngine-Error-mc5uhumz.xwc --pid=Microsoft-MIEngine-Pid-twdsngu2.zzq --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
-0xB&
ERROR: No error


E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-1va50uaw.2g4 --stdout=Microsoft-MIEngine-Out-iaraai5w.xkb --stderr=Microsoft-MIEngine-Error-244syxg4.0da --pid=Microsoft-MIEngine-Pid-rg44mr2j.dws --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
0xAFN
ERROR: No error


E:\Users\admin\Documents\VScode\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-4 17:31:32 | 显示全部楼层
本帖最后由 ba21 于 2019-12-4 17:32 编辑

发错对像
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-4 17:33:09 | 显示全部楼层

昨晚看了下,没完成,今 天又看了下,看楼上的代码实属高手看的代码,如 果不格式化好我是没法看下去。
所以我还是按我的思路搞了段代码,给参考下:
  1. #include <stdio.h>
  2. #include <conio.h>

  3. /*
  4. 16进制字符串转10进制算法:

  5. 用变量a存放转换结果,赋初值为0

  6. 逐一取得字符串每个字符:从头一直取字符,直到遇到0为止

  7. 每取得一个字符:

  8. -变量a自乘16

  9. -判断字符是否数字字符,如果是数字字符则直接转换成数值

  10. -否则,判断字符是否小写字母a~f,如果是转成10~15数值

  11. -否则,判断字符是否大写字母a~f,如果是转成10~15数值

  12. -将以上得到的数值加到变量a上,然后进行下一个字符的处理
  13. */
  14. int h2d(char *s)
  15. {
  16.         int a=0;
  17.         while ( *s )
  18.         {
  19.                 a *= 16;
  20.                 if ( *s>='0' && *s<='9' )
  21.                         a += *s - '0';
  22.                 else if ( *s>='a' && *s<='f' )
  23.                         a += *s- 'a' + 10;
  24.                 else if ( *s>='A' && *s<='F' )
  25.                         a += *s - 'A' + 10;

  26.                 s++;
  27.         }

  28.   return a;
  29. }

  30. /*
  31. 16进制字符串转10进制算法:

  32. 用变量a存放转换结果,赋初值为0

  33. 逐一取得字符串每个字符:从头一直取字符,直到遇到0为止

  34. 每取得一个字符:

  35. -变量a自乘10

  36. -数字字符转换成数值
  37. */
  38. int d2d(char *s)
  39. {
  40.         int a=0;
  41.         while ( *s )
  42.         {
  43.                 a *= 10;
  44.                 a += *s - '0';
  45.                 s++;
  46.         }

  47.   return a;
  48. }

  49. int inputint()
  50. {
  51.         int i, x;
  52.         char num[1024] = {'\0'};
  53.         char ch;

  54. /* 接受输入 */
  55.         i=0;
  56.         while( (ch=getch())!='\r')
  57.         {
  58.                 // 退格
  59.                 if ( (ch == 8) && (i!=0) )
  60.                 {
  61.                         num[--i] = '\0';
  62.                         printf("\b \b"); // 实现退格回显
  63.                         continue;
  64.                 }

  65.                 // 不是有效字符 continue
  66.                 if ( !( (ch>='0' && ch<='9') || (ch>='a' && ch<='f') || (ch>='A' && ch<='F') || (ch=='x' || ch=='X') ) )
  67.                 {
  68.                         continue;
  69.                 }
  70.                
  71.                 // 先接收第1位               
  72.                 if ( i==0 )
  73.                 {
  74.                         // 第1位只能'0' - '9'
  75.                         if ( !(ch>='0' && ch<='9') )
  76.                                 continue;

  77.                         num[i] = ch;
  78.                         i++;
  79.                         putch(ch); // 回显                               
  80.                 }
  81.                 else // 其它位
  82.                 {                       
  83.                         if ( num[0]=='0' )
  84.                         {
  85.                                 // 16进制

  86.                                 if ( i==1 )
  87.                                 {       
  88.                                         // 第2位只能接收x
  89.                                         if (ch!='x' && ch!='X')
  90.                                                 continue;

  91.                                 }
  92.                                 else
  93.                                 {
  94.                                         // 第2位后只能接收'0' - '9' 'a' - 'f'
  95.                                         if ( !(ch>='0' && ch<='9') && !(ch>='a' && ch<='f') && !(ch>='A' && ch<='F') )
  96.                                                 continue;
  97.                                 }               

  98.                         }
  99.                         else
  100.                         {
  101.                                 // 10进制

  102.                                 // 只能接收'0' - '9'
  103.                                 if ( !(ch>='0' && ch<='9') )
  104.                                         continue;                       
  105.                         }
  106.                         num[i] = ch;
  107.                         i++;
  108.                         putch(ch); // 回显       
  109.                 }

  110.         }
  111.         printf("\n");

  112. /* 转换 */
  113.         if ( num[0]=='0')
  114.                 // 16 转 10
  115.                 x = h2d(num);
  116.         else               
  117.                 // 10 转 10
  118.                 x = d2d(num);

  119.         return x;
  120. }

  121. int main(void)
  122. {
  123.         int n;

  124.         n = inputint();
  125.        
  126.         printf("%d\n", n);

  127.         return 0;
  128. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-4 18:31:46 | 显示全部楼层
本帖最后由 jackz007 于 2019-12-4 18:37 编辑
Oxford 发表于 2019-12-4 12:16
for(; (s[m - 1] == 0x09 || s[m - 1] == 0x20) && m > 0 ; s[m -- - 1] = 0)                ;
  ...


      问题出在代码中含有 bool 数据类型,C 不支持,C++ 支持。其实,这个问题很好解决,只要把文件的扩展名从 ".c" 改成 ".cpp" 就可以了。
      我使用的编译器和你的完全一样,你可以试试看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 05:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表