毕业两年多,几乎天天游弋在代码的海洋中,每天都在跟茫茫的多媒体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"); } 调试效果
|
|