最近,我一直在编写一些基本的命令行程序(我想在夏天保持我的技能),但是printf和scanf已经开始让我恼火了。我不是一个出色的C程序员,我不得不进入printf/scanf,他们的不稳定性(更糟糕的是,fgets和他们的同类)并没有让我处于一个令人欣慰的环境(正因为这个原因,我喜欢NSLog,它的默认名称空间以及自动NSString和NSObject解析)。
然而,令我非常失望的是,NSLog没有对应的函数,并且打印了大量额外的“垃圾”(时间、函数名等,以及末尾的换行符),这大大违背了我使用它的许多目的。因此,我决定坐下来进行另一种编程练习,并编写函数来代替printf和scanf,以满足我的需要。
瞧,我想出了自己的NSInput.h文件,包含两个函数:NSPrint()和NSScan()。这两个函数在很大程度上是模仿printf和scanf的,但也处理NSString的。我知道我在这里使用神圣的名称空间,但我无法抗拒(IFPrint和IFScan听起来糟透了!)
现在,虽然我真的很高兴我有工作代码(您可以找到源代码这里),但我知道它并不有效(但令我惊讶的是,在Xcode 4中,NSPrint比LLDB下的printf效率高几倍,但这并不重要)。我需要一些建议,如何使功能更好,更有效率。例如,NSScan将接收到的va_list转换为NSPointerArray,并使用NSScanner扫描格式和输入字符串,因此我知道还有很多改进的余地。
基本上,,,我想知道的是,我犯了什么明显的错误,可以而且应该修复吗?有什么是我错过的吗?我应该被称为宠坏了,然后回到使用printf和scanf吗?请告诉我,我在这里找输入(双关不是故意的!)
,提前谢谢!
发布于 2010-08-09 09:05:48
我的想法:
FILE*,即您应该对fprintf()和fscanf()的接口进行建模,以获得更大的灵活性。fputs(),您的printf函数可能会更好例如:
void NSFPrint (FILE* fp, NSString *format, ...)
{
// Create the variable argument list.
va_list args;
va_start(args, format);
// Using NSString, parse the argument list and convert it to a C string.
fputs([[[[NSString alloc] initWithFormat:format arguments:args] autorelease] UTF8String], fp);
va_end(args);
}https://stackoverflow.com/questions/3436129
复制相似问题