gpt4 book ai didi

objective-c - printf/scanf替换方法: some feedback/advice needed

转载 作者:行者123 更新时间:2023-12-04 06:48:35 24 4
gpt4 key购买 nike

我最近一直在写一些基本的命令行程序(我想在这个夏天保持我的技能敏锐),但是 printfscanf 已经开始惹恼我。我不是一个出色的 C 程序员,并且不得不进入 printf/scanf 和它们的不稳定性(或者更糟的是,fgets 和它们的同类) 并没有让我感到舒服(正因为这个原因,我喜欢 NSLog,它有舒适的默认命名空间和自动的 NSStringNSObject 解析)。

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

瞧,我想出了自己的 NSInput.h 文件,其中包含两个函数:NSPrint()NSScan() .这两个函数很像 printf 和 scanf,但也处理 NSString。我知道我在这里踩到了神圣的命名空间,但我无法抗拒(IFPrintIFScan 听起来很糟糕!)。

现在,虽然我真的很高兴我有工作代码(您可以找到源代码 here ),但我知道它效率不高(尽管令我惊讶的是,NSPrint 在 Xcode 4 的 LLDB 下比 printf 效率高几倍,但这不是重点)。我需要一些关于如何使功能更好、更高效的建议。 NSScan,例如,将它接收到的va_list转换成一个NSPointerArray,并使用NSScanner来扫描格式和输入字符串,所以我知道还有很大的改进空间。

基本上,我想知道的是,我犯了哪些明显的错误可以而且应该改正?我错过了什么大事吗?我是否应该被称为被宠坏并返回使用 printfscanf?请告诉我,我在这里寻找输入(双关语不是故意的!)...

提前致谢!

最佳答案

我的想法:

  • 不要称它们为 NSxxxxx,NS 是为 Cocoa 和 Foundation 保留的。
  • 两个函数都应修改为接受 FILE*,即您应该为 fprintf()fscanf() 的接口(interface)建模更大的灵 active 。
  • 如果您使用 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);
}
  • 考虑添加对 UTF-8 以外的编码输入和输出的支持。
  • 您的 scanf 替代品在标准输入上混合了 C 缓冲 IO 和 Unix 非缓冲 IO。这可能很糟糕。
  • 即使不需要,您的 scanf 替代品也会读取到行尾。我没有仔细检查,但如果扫描格式没有消耗整行,那么看起来你正在丢弃输入。这可能很糟糕。

关于objective-c - printf/scanf替换方法: some feedback/advice needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com