2025年4月13日 星期日 乙巳(蛇)年 正月十四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

从屏幕读取字符串,并提取其中数字串,再次打印到屏幕或写入一个文件

时间:08-16来源:作者:点击数:58

毕业两年多,几乎天天游弋在代码的海洋中,每天都在跟茫茫的多媒体SDK和开源库打交道,这次去XXXX公司面试中却无法脱机写个简单字符串程序。思路流程虽然清楚(当时只是画了个流程图写了几个伪代码),但实现时发现自己平时很少用这些系统函数,编码时发现对系统函数入口参数,返回参数模棱两可。关键一点还是平时写代码太依赖一linux的系统man命令帮助查找,平时写代码几乎很少人为去记忆这些系统函数入口参数,返回值等。因为这系统函数都是标准的C库函数,linux桌面系统如ubuntu,基本上man一下就懂了,最惨的情况下去查一下C库。这次面试离开电脑,一张纸,一支笔就显得茫然。下文是回家后借助于linux的系统的MAN命令和GCC调试编码实现。以告诫和警示自己。

实现方法1:

  • /************************************************************
  • 文件摘要: 本文利用gets 实现从屏幕(标准输入stdin)读取字符,并将其中的数字
  • 字符打印出来或者存在到一个文件中
  • */
  • #include<stdio.h>
  • #include <stdlib.h>
  • /**************************************************************************
  • * 函数名称:ReadDigit
  • * 功能描述:从屏幕读取字符串,并提取数字,将数字保存起来或打印到屏幕
  • * 输入参数:无
  • * 输出参数: 无
  • * 返 回 值:失败:-1; 成功:0
  • ?
  • * 修改日期 版本号 修改人 修改内容
  • * -----------------------------------------------
  • * 2014/8/6 V1.0 hfl XXXX
  • ***************************************************************************/
  • int ReadDigit(void)
  • {
  • int flag = 1;
  • char buf1[1024];
  • char buf2[1024];
  • int i=0,j=0;
  • FILE *fp;
  • fp = fopen("chars2.txt","w");
  • if (fp==NULL)
  • {
  • printf("The file is creat failed\n");
  • return -1;
  • }
  • gets(buf1);
  • while((buf1[i]!='\0')&&(i<1024))
  • {
  • if((buf1[i]<='9')&&(buf1[i]>='0'))
  • {
  • buf2[j++]=buf1[i];
  • if(flag==1)
  • {
  • printf("screen=%d\n",atoi(&buf1[i]));
  • flag=0;
  • }
  • }
  • else
  • {
  • flag=1;
  • }
  • i++;
  • }
  • printf("buf2=%d\n",atoi(buf2));
  • buf1[j]='\0';
  • #if 1
  • if((fwrite(buf2,j,1,fp))!=1)
  • {
  • printf("write is failed \n");
  • fclose(fp);
  • return -1;
  • }
  • fclose(fp);
  • #endif
  • return 0;
  • }
  • /**************************************************************************
  • * 函数名称:main
  • * 功能描述:一个进程的入口
  • * 输入参数:无
  • * 输出参数: 无
  • * 返 回 值:无
  • * 修改日期 版本号 修改人 修改内容
  • * -----------------------------------------------
  • * 2014/8/6 V1.0 hfl XXXX
  • ***************************************************************************/
  • void main()
  • {
  • int rc = -1;
  • rc = ReadDigit();
  • if(-1 == rc )
  • printf("ReadDigit from screen is failed\n");
  • }

调试结果如下:

实现方法2:

  • /************************************************************
  • 文件摘要: 本文利用getchar 实现从屏幕(标准输入stdin)读取字符,并将其中的数字
  • 字符打印出来或者存在到一个文件中
  • */
  • #include<stdio.h>
  • #include <stdlib.h>
  • /**************************************************************************
  • * 函数名称:ReadDigit
  • * 功能描述:从屏幕读取字符串,并提取数字,将数字保存起来或打印到屏幕
  • * 输入参数:无
  • * 输出参数: 无
  • * 返 回 值:失败:-1; 成功:0
  • ?
  • * 修改日期 版本号 修改人 修改内容
  • * -----------------------------------------------
  • * 2014/8/6 V1.0 hfl XXXX
  • ***************************************************************************/
  • int ReadDigit(void)
  • {
  • int flag = 1;
  • char buf[1024];
  • int i=0;
  • FILE *fp;
  • fp = fopen("chars.txt","w");
  • if(NULL == fp)
  • {
  • printf("The file is Open fail\n");
  • return -1;
  • }
  • while(flag != EOF)
  • {
  • flag = getchar();
  • if( flag == EOF )
  • {
  • break;
  • }
  • else
  • {
  • if(flag<='9'&&flag >='0')
  • {
  • #if 1
  • buf[i]=flag;
  • i++;
  • if(1024==i)
  • printf("The buf is full");
  • #endif
  • }
  • }
  • }
  • printf("buf=%d\n",atoi(buf));
  • buf[i]='\0';
  • #if 1
  • if((fwrite(buf,i,1,fp))!=1)
  • {
  • printf("write is failed \n");
  • fclose(fp);
  • return -1;
  • }
  • fclose(fp);
  • #endif
  • return 0;
  • }
  • /**************************************************************************
  • * 函数名称:main
  • * 功能描述:一个进程的入口
  • * 输入参数:无
  • * 输出参数: 无
  • * 返 回 值:无
  • * 修改日期 版本号 修改人 修改内容
  • * -----------------------------------------------
  • * 2014/8/6 V1.0 hfl XXXX
  • ***************************************************************************/
  • void main()
  • {
  • int rc = -1;
  • rc = ReadDigit();
  • if(-1 == rc )
  • printf("ReadDigit from screen is failed\n");
  • }

调试效果

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门