【发布时间】:2010-08-08 21:25:31
【问题描述】:
我最近一直在编写一些基本的命令行程序(我想在整个夏天保持我的技能),但是printf 和scanf 已经开始让我烦恼了。我不是一个出色的 C 程序员,不得不陷入 printf/scanf 和他们的不稳定性(或者更糟糕的是,fgets 和他们的同类)并不完全让我处于一个舒适的环境中(出于这个原因确切地说,我喜欢NSLog,它具有令人欣慰的默认命名空间和自动的NSString 和NSObject 解析)。
但令我失望的是,NSLog 没有对应的函数,并且会打印很多额外的“垃圾”(时间、函数名等,以及末尾的换行符),这让很多人失望我使用它的目的。所以我决定坐下来进行另一种编程练习,并编写函数来替换 printf 和 scanf 以满足我的需求。
瞧,我想出了自己的 NSInput.h 文件,其中包含两个函数:NSPrint() 和 NSScan()。这两个函数非常模仿 printf 和 scanf,但也处理 NSString 的。我知道我在这里踩到了神圣的命名空间,但我无法抗拒(IFPrint 和 IFScan 听起来很糟糕!)。
现在,虽然我很高兴我有工作代码(您可以找到源代码 here),但我知道它效率不高(但令我惊讶的是,NSPrint 是其数倍比 Xcode 4 中的 LLDB 下的 printf 更有效,但这不是重点)。我需要一些关于如何使功能更好、更高效的建议。例如,NSScan 将接收到的va_list 转换为NSPointerArray,并使用NSScanner 扫描格式和输入字符串,所以我知道还有很大的改进空间。
基本上,我想知道的是,我犯了哪些明显的错误可以而且应该改正?有什么我错过的大事吗?我应该被称为被宠坏并重新使用printf和scanf吗?请告诉我,我在这里寻找输入(双关语不是故意的!)...
提前致谢!
【问题讨论】:
-
您在 [NSString stringWithFormat:] 无法获得的类似 printf 的函数中寻找什么?
-
我注意到一个明显的遗漏是缺少测试套件。
-
@Seamus:如果您查看源代码,那正是我所做的。 @Greg:实际上我以前从未做过测试套件,所以我想现在是尝试的好时机,对吧?感谢您的回复!
-
哎呀。我的大脑在思考 sprintf,我试图弄清楚你为什么要重新发明轮子,作为现有轮子的薄包装。 :)
-
不要称它们为 NSPrint 和 NSScan。不,只是不要!
标签: objective-c printf scanf xcode4