PHP中有没有办法命名我的指定符,例如Python中的? 我想要PHP: $foo = array('name' => 24); printf("%(name)d", $foo); 我在Google或PHP手册中找不到任何相关的信息. 解决方案 不错的问题! 通过使用Regexes,您可以在没有太多麻烦的情况下滚动.我基于function vsprintf_named($format, $args) { $names = preg_match_all('/%\((.*?)\)/', $format, $matches, PREG_SET_ORDER); $values = array(); foreach($matches as $match) { $values[] = $args[$match[1]]; } $format = preg_replace('/%\((.*?)\)/', '%', $format); return vsprintf($for
以下是关于 format-specifiers 的编程技术问答
我发现%g仅在需要时显示小数.如果数字是完整的,则不会添加尾随.000,所以很好. 但是在例如1.12345的情况下,我希望它将答案简短为1.123. 在1.000的情况下,我只想显示1,就像%g一样. 我尝试在字符串中指定%.3G,但这无效. 如果有人有答案,我会很感激! 解决方案 我通过 ieeee规格据我了解,您的希望行为是不可能的. 我建议您使用nsnumberformatter类.我写了一个与您的希望行为相匹配的示例.我希望这会有所帮助: NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; [numberFormatter setMaximumFractionDigits:2]; [numberFormatte
尝试使用%@的宽度说明器时发现了一些奇怪的东西.它们在NSLog中工作正常,但与NSString stringWithFormat:. 示例: NSString *rightAligned = @"foo"; NSString *leftAligned = @"1"; NSLog(@"| %15@ | %-15@ |", rightAligned, leftAligned); 您将获得: 的预期输出 | foo | 1 | ,但用NSLog stringWithFormat:: NSString *test = [NSString stringWithFormat:@"| %15@ | %-15@ |", rightAligned, leftAligned]; test的值是错误的: | foo | 1 | 如果我将其更改为使用%s和cStringUsingEncoding:,则可以使用:
我正在使用指数格式来格式化C#中的小数号. 例如,如果数字为 0.0001234567 用 格式化 (0.0000123456).ToString("E4"); 显示 1.2345E-004 如何从指数中删除引导零,以如下图读取? 1.2345E-4 解决方案 假设您需要在小数点后始终显示4位数字,请尝试 "0.0000E+0" 所以它将显示 (0.0000123456).ToString("0.0000E+0"); //1.2345E-5 (0.0000120000).ToString("0.#E+0"); //1.2000E-5 如果您不需要在小数点后显示4位数字 "0.#E+0" 所以它将显示 (0.0000123456).ToString("0.#E+0"); //1.2E-5 (0.0000120000).ToString("0.#E+0"); //1.2E-5 其他解决方案 引用 msd
这是我的代码,我不完全知道为什么会发生这种情况: #include void foo(float *); int main() { int i = 10, *p = &i; foo(&i); } void foo(float *p) { printf("%f\n", *p); } 输出: 0 解决方案 您正在调用带有int指针的float*的函数.在C ++中,这是一个错误,您的代码不会编译.在C中,无论如何,您很可能会得到警告和未定义的行为. 其他解决方案 已经说过,您正在将整数变量的地址作为单个精度浮点数的地址. 理想情况下,这种隐式转换应该不允许,但是根据编译器以及它是干净的C还是C ++,它可能只会导致警告. 但是它为什么要精确打印0? 这是因为单个精度fpn的方式为(1 bit of sign)|(8 bits of biased exponent)|(23 bits of sig
我正在处理与几个目标体系结构进行交叉编译的代码. 我看着少数 https://stackoverflow.com/questions/54265217/mingw64-w64-attributeformat-and-cinttypes-header">hits from searching Stack Overflow for "printf size_t unknown conversion type character" warning, however those posts all seem要与minGW相关,因此这些答案本质上是针对_WIN32的ifdef,不适用于我的实例本质上相同的问题,即printf不识别" %zu"作为格式特征器对于size_t,但是使用mips交叉编译器. 是否有现有的编译器标志(对于著名的跨编译器),使LIBC能够识别"%Zu"为size_t? 的格式特征器 $ cat ./main.c // main.c #include
Visual Studio有一个int main() { char test[]= "abc"; _tprintf(_T("%hs\n"),test); } 但是,如果我用mingw gcc和-wall编译了同样的事情,我会收到以下警告: warning: format '%hs' expects type 'short int *', but argument 2 has type 'char *' 我正在采用一种可接受的方式来指定mingw中的单个字符字符串? 谢谢 编辑 - 此问题已公平地详细回答.简短的答案是肯定的,这是指定mingw中单个字符字符串的一种可接受的方法,并且可以忽略警告. 解决方案 您还会注意到Visual Studio文档说: 注意:与char类型的数据一起使用时,H和L前缀是Microsoft扩展. 我认为这将更准确地说:"与'c'或's'格式指定器(上或下情况)一起使用". 意识到,海湾合作委员会编译器真的
我正在阅读HTML页面并试图检索其中的特定字符串. 我有以下代码: std::string str = test.GetString(); // someString ( the string i have checked it, it's basically an html page ) std::smatch match; std::regex re("0x(\\d|[A-Z]).*0000"); // the pattern I'm searching for if (std::regex_search(str, match, re)){ test = "found"; // found gets printed } TRACE("%s\n",match[0]); // this outputs some garbage like this '˜ò' 我想打印/存储找到的比赛结果,但我得到了一些垃圾.
为什么当我在CodeBlocks中使用Specifier F时,编译器给我错误的"格式过多"? #include int main() { float x = 3.14159; printf("%f\n", x); printf("%F\n", x); return 0; } 错误: error: unknown conversion type character 'F' in format [-Werror=format=] error: too many arguments for format [-Werror=format-extra-args] 解决方案 看起来某些版本的GCC无法识别%F,奇怪的是.我的gcc version 9.2.0 (tdm64-1)对于具有C11标准的Windows,尽管它仅发布那些警告消息而不是错误,但仍未识别它. $ gcc main2.c -Wextra -Wal
我永远无法理解如何在c. 中打印unsigned long数据类型 假设unsigned_foo是unsigned long,然后我尝试: printf("%lu\n", unsigned_foo) printf("%du\n", unsigned_foo) printf("%ud\n", unsigned_foo) printf("%ll\n", unsigned_foo) printf("%ld\n", unsigned_foo) printf("%dl\n", unsigned_foo) 所有这些都打印了某种-123123123数字,而不是我拥有的unsigned long 解决方案 %lu是unsigned long的正确格式.听起来这里还有其他问题,例如内存腐败或非专业化变量.也许向我们展示更大的图片? 其他解决方案 int %d 对于长int %ld 对于长长int %lld 对于未签名的长长int %llu
我制作了一个非常简单的程序来打印两个变量的地址. #include int main() { int a,b; printf("%u\n%u",&a,&b); return 0; } 但是,Clang-3.7编译器发出警告为: 警告:格式指定类型'unsigned int',但该参数具有'int *'[-wformat]` 但是,当我与GCC-5.x编译时,它没有发出警告.他们哪个是正确的? 我知道的一件事是,这样做unsigned int num=&a;是错误的,因为地址只能存储在指针中.但是,编译器打印地址时发出警告是正确的吗? 我从 gcc.godbolt.org 解决方案 %p是要打印地址的正确格式指定符: printf("%p\n%p",(void*)&a, (void*)&b); C标准要求与%p相对应的参数应为void*类型.所以演员在那里. c11,参考 p该论点应
当我在以下程序中的格式字符串中不包括%d和%c规范之间的空白时,并在运行时给出输入为" 4 h",则输出IS是"整数= 4 and cartarion =. 在这种情况下,如何确切地变量"c"如果我在%d和%c规范之间包含一个空白,则有什么区别? ? 代码 #include int main() { char c; int i; printf("Enter an Integer and a character:\n"); scanf("%d %c",&i,&c); printf("Integer = %d and Character = %c\n",i,c); getch(); } 解决方案 如果您阅读了 %n - 到目前为止已经处理了多少个字符 %[…] - 扫描集 %c - 阅读一个字符. (POSIX添加了第四个,%C,等效于%lc.) 输入白空间字符(如isspace
我需要在我的大学做海鲜菜单作为作业.我将在此处提供相关代码: int main () { int a,d; float c ; char b,s,S,m,M,l,L; printf ("\n\t\t\t\tSeafood Menu\n"); printf ("----------------------------------------------------------------------------------\n"); printf ("\t\t\t\t\t\t Dish Size\n"); printf ("Item Number\t Seafood Dish\t Small\t Medium Large\t\n"); printf ("----------------------------------------------------------------------------------\n"); printf
所以我偶然发现了这个代码,但我无法弄清楚它的目的或它的工作原理: int word_count; scanf("%d%*c", &word_count); 我的第一个想法是,%*d是引用char指针或不承担word_count的char变量. 有人可以为此提供一些启示吗? 解决方案 *c的意思是,将读取字符但不会分配,例如,对于输入" 30a",它将分配30分配给word_count,但是'a'将被忽略. 其他解决方案 "%*c"中的*代表assignment-suppressing character *:如果存在此选项,则该函数不会将转换结果分配给任何接收参数. 1 ,因此字符将被读取但未分配给任何变量. 脚注: 1. fscanf 其他解决方案 引用C11标准,第7.21.6.2章, fscanf() [...]每个转换规范均由字符%引入. 在百分比之后,以下显示顺序: - 可选分配支持字符*. - [...] - 转
我必须为大学做一个课程,在该课程中,我应该在一定程度上分开一定数量的人,喜欢的人和不喜欢某事的人. 所以我做到了: char like[100]; printf("Like? Y or N \n"); scanf ("%c", like); 该程序编译了,但没有按应有的方式工作.当被问到"喜欢?"时,用户无法写" y或n" 所以我尝试了: char like[100]; printf("Like? Y or N \n"); scanf ("%s", like); 它起作用.但是我不知道为什么它起作用.有人可以向我解释一下%c和%s scanf>>>> 中的区别 解决方案 首先,请在来到这里之前进行一些基础研究 - 通常可以通过快速的Google搜索或检查您的方便的C参考手册来回答此类问题. char inputChar; // stores a single charact
我想知道为什么输出为0.000000. 我知道使用float格式指定符或使用B类型的值类型的打印int可以像许多位置书写一样指定行为. 我在引用它 "如果转换规范无效,则行为为 不明确的.如果任何参数不是正确的类型 相应的转换规范,行为是不确定的." 但它总是给出0.000000,必须在寄存器或汇编代码中定义某些内容. 简而言之 #include int main() { int i=10; printf("%f\n",i); return 0; } 所有人都说我知道我的价值可能是输出中的某个地方,但是由于进动窗口大小,它未显示在控制台上. 如果我使用%e,我会得到 解决方案 您一天可能会获得相同的结果,第二天的另一个结果,这是关于 使用printf 打印时,应使用适当的类型指定符 其他解决方案 未定义的行为并不意味着您必须在不同的运行中获得不同的结果.这仅意味着您一定不能期望任何定义明确的行为. 其他
我有一个给定的代码,我认为该代码有问题: 我在xinu下编译. 下一个变量是相关的: unsigned long ularray[]; int num; char str[100]; 有一个函数返回int: int func(int i) { return ularray[i]; } 现在代码是这样的: num = func(i); sprintf(str, "number = %lu\n", num); printf(str); 问题是我在用%lu打印时获得了大数字,这是不正确的. 如果我将%lu 更改为%d ,我会得到正确的数字. 例如:使用%lu,我得到27654342,而我的d则获得26,后者是正确的; 给出了变量,给出了函数的声明,我写了正文,但必须返回int; 我的问题是: 我不熟悉'sprintf',也许有问题吗? 我分配了unsigned long in int,然后用%lu打印int,这是正确的吗
在研究如何进行跨平台printf() c中格式字符串时(也就是说,考虑到我希望每个整数参数printf()应该是),我跨过 printf()> 的Wikipedia文章的这一部分.本文讨论了可以传递给printf()格式字符串的非标准选项,例如(似乎是Microsoft特定的扩展程序): printf("%I32d\n", my32bitInt); 继续说: ISO C99包括inttypes.h标题 包括许多宏的文件 用于独立于平台的printf 编码. ...然后列出一组宏,可以在上述标题中找到.查看标题文件,要使用它们,我必须写: printf("%"PRId32"\n", my32bitInt); 我的问题是:我想念什么吗?这真的是标准的C99做到这一点吗?如果是这样,为什么? (尽管我从未见过这种使用格式字符串的代码并不感到惊讶,因为它看起来很麻烦...) 解决方案 c的理由似乎暗示正在标准化现有实践: 是从几个现有64位系统上的