- /*仿编辑器自动换行功能测试代码
- *@date: 2013-11-05
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- #include <ctype.h>
- /*定义一行的最大字符数,此处可以视实际情况修改。*/
- #define MAX_BUFFER 40
- #define INIT_BUFFER(_Memory) do{_BufIndex=0;memset(_Memory,0,MAX_BUFFER+1);}while(0)
- /*_BufIndex: 标示当前缓冲区的字符个数。
- *_Buffer: 行缓冲区,保存读入一行的字符。
- *_Swap: 交换区,用作打印输出。
- */
- static unsigned int _BufIndex;
- static char _Buffer[MAX_BUFFER+1],_Swap[MAX_BUFFER+1];
- void SwapBuffer(char *_Dst,char *_Src,int _Size)
- {
- int _Index;
- INIT_BUFFER(_Dst);
- for(_Index=0;_Index<_Size;_Index++)
- {
- _Dst[_Index]=_Src[_Index];
- }
- #ifdef _POSIX_
- fprintf(stdout,"%s\\r\\n",_Dst);
- #else
- fprintf(stdout,"%s\\n",_Dst);
- #endif
- INIT_BUFFER(_Src);
- }
- /*缓冲读入一行*/
- void BufferedReader(FILE *_File)
- {
- int _NewLine,_Char,_Index;
- while((_Char=fgetc(_File))!=EOF)
- {
- _Buffer[_BufIndex++]=(char)_Char;
- if(_BufIndex>=MAX_BUFFER+2)
- {
- _NewLine=0;
- for(_Index=_BufIndex-3;_Index>=0;_Index--)
- {
- if(isspace(_Buffer[_BufIndex-2])||iscntrl(_Buffer[_BufIndex-2]))
- break;
- if(isalnum(_Buffer[_Index]))
- _NewLine++;
- else
- break;
- }
- SwapBuffer(_Swap,_Buffer,_BufIndex-_NewLine-2);
- fseek(_File,-(_NewLine+2),SEEK_CUR);
- }
- }
- SwapBuffer(_Swap,_Buffer,_BufIndex-1);
- }
- int main(int argc,char **argv)
- {
- char _FileName[128];
- FILE *fp=NULL;
- /*如果双击运行可执行文件,则提示输入文件名。
- 如果以控制台加参数方式运行,则将参数一作为文件名。*/
- if(argc>1)
- {
- fp=fopen(argv[1],"r");
- }
- else
- {
- fprintf(stdout,"Arguments not enough! Please input a file name : \\n>> ");
- scanf("%s",_FileName);
- fp=fopen(_FileName,"r");
- }
- if(!fp)
- {
- fprintf(stderr,"File %s can't read! Please input a normal text file.",argv[1]);
- exit(EXIT_FAILURE);
- }
- BufferedReader(fp);
- fclose(fp);
- fprintf(stdout,"\\n\\nPrint over! Please press any key to close this window.\\n");
- getch();
- return EXIT_SUCCESS;
- }
- //该片段来自于http://www.codesnippet.cn/detail/060620149720.html
来源: http://www.codesnippet.cn/detail/060620149720.html