C/C++ 改写scanf

来源:百度知道 编辑:UC知道 时间:2024/06/20 18:56:43
请教一个scanf函数的改版:
在原有基础上增加这样的功能: 每次输入一次后就输出字符串"ENTER.."
void myscan(const char* fmt,...);
当前信息:不定参数的使用,va_list,va_start,va_end

要求此函数的完整代码(不可破坏原有的功能),语言限C或C++
不胜感激
我用的是vs2005,怎么好像也没找到vscanf(_IO_vfscanf也没有)呢?
解决了,参考了老外的代码,我意在封装fscanf,这和scanf类似,关键代码如下(VS2005):
#ifdef _DLL
#error "请将配置属性|C/C++|代码生成|运行时库设置为多线程调试(/MTd)
#endif

#ifdef _UNICODE
#define _tinput_l _winput_l
#else
#define _tinput_l _input_l
#endif

extern "C"
int __cdecl _tinput_l(FILE*, const TCHAR*, _locale_t, va_list);

int Scan(const char* format, ... ){//是自定义文件类的成员函数
char* arglist = (char*)&format+sizeof(format);//取不定参数首地址
return _tinput_l(f, format, 0, arglist);//f是文件指针FILE*
}

如果有vscanf的话:
int myscanf(const char *format, ...)
{
int retval;

va_list arglist;

va_start(arglist, format);

retval = vscanf(format,arglist);

va_end(arglist);

printf("ENTER..");

return(retval);
}
可惜我用的是VC6,是没有这个库函数的。
如果找不到这个函数,那么想实现myscanf是相当困难的。

#include <stdarg.h>
#include <stdio.h>
int
scanf (const char *format, ...)
{
va_list arg;
int done;

va_start (arg, format);
#ifdef USE_IN_LIBIO
done = _IO_vfscanf (stdin, format, arg, NULL);
#else
done = vfscanf (stdin, format, arg);
#endif
va_end (arg);

return done;
}
这个函数的原形应该是这样的。但是还要在其中有"ENTER.." 的输出 现在我没有资源帮你解决
希望对你有帮助吧