首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Printf/scanf替换方法:需要一些反馈/建议

Printf/scanf替换方法:需要一些反馈/建议
EN

Stack Overflow用户
提问于 2010-08-08 21:25:31
回答 1查看 1.5K关注 0票数 3

最近,我一直在编写一些基本的命令行程序(我想在夏天保持我的技能),但是printfscanf已经开始让我恼火了。我不是一个出色的C程序员,我不得不进入printf/scanf,他们的不稳定性(更糟糕的是,fgets和他们的同类)并没有让我处于一个令人欣慰的环境(正因为这个原因,我喜欢NSLog,它的默认名称空间以及自动NSStringNSObject解析)。

然而,令我非常失望的是,NSLog没有对应的函数,并且打印了大量额外的“垃圾”(时间、函数名等,以及末尾的换行符),这大大违背了我使用它的许多目的。因此,我决定坐下来进行另一种编程练习,并编写函数来代替printf和scanf,以满足我的需要。

瞧,我想出了自己的NSInput.h文件,包含两个函数:NSPrint()NSScan()。这两个函数在很大程度上是模仿printf和scanf的,但也处理NSString的。我知道我在这里使用神圣的名称空间,但我无法抗拒(IFPrintIFScan听起来糟透了!)

现在,虽然我真的很高兴我有工作代码(您可以找到源代码这里),但我知道它并不有效(但令我惊讶的是,在Xcode 4中,NSPrint比LLDB下的printf效率高几倍,但这并不重要)。我需要一些建议,如何使功能更好,更有效率。例如,NSScan将接收到的va_list转换为NSPointerArray,并使用NSScanner扫描格式和输入字符串,因此我知道还有很多改进的余地。

基本上,,我想知道的是,我犯了什么明显的错误,可以而且应该修复吗?有什么是我错过的吗?我应该被称为宠坏了,然后回到使用printfscanf吗?请告诉我,我在这里找输入(双关不是故意的!)

,提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-09 09:05:48

我的想法:

  • 不要叫他们NSxxxxx,NS是为可可和基金会预留的。
  • 应该对这两个函数进行修改以接受FILE*,即您应该对fprintf()fscanf()的接口进行建模,以获得更大的灵活性。
  • 如果您使用fputs(),您的printf函数可能会更好

例如:

代码语言:javascript
复制
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);
}
  • 考虑在UTF-8以外的编码中添加对输入和输出的支持。
  • 在stdin上,扫描替换混合了C缓冲IO和Unix非缓冲IO。这可能很糟糕。
  • 即使在不需要扫描的情况下,扫描替换也会一直读到行的末尾。我没有仔细检查,但是如果扫描格式没有消耗整行,它看起来就像是在丢弃输入。这可能很糟糕。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3436129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档