從屏幕讀取字符串,並提取其中數字串,再次打印到屏幕或寫入一個文件

  畢業兩年多,幾乎天天遊弋在代碼的海洋中,每天都在跟茫茫的多媒體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");
}


調試效果


發佈了71 篇原創文章 · 獲贊 22 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章