Tag: printf

如果是整数,则使用sprintf格式化浮点数,不带小数位

最初我使用带有浮点数的sprintf总是带有2位小数,使用以下代码: static void MyFunc(char* buffer, const float percentage) { sprintf(buffer, “%.2f”, percentage); } 传递的百分比值之一是0x419FFFFF 20(调试器视图),这打印到缓冲区20.00。 我想改为在不是整数时显示2位小数,例如 94.74 displayed as 94.74 94.7 displayed as 94.70 0 displayed as 0 5 displayed as 5 100 displayed as 100 我目前正在使用以下代码: static void MyFunc(char* buffer, const float percentage) { int fractional_part = ((percentage – (int)percentage) * 100); if (0 […]

Eclipse / MiniGW中的scanf问题

我试图在eclipse中运行以下代码,但控制台保持空白,直到我停止程序,此时输出“输入下一个值(<= 0退出)2130567168分钟是35509452小时,48分钟。” 一遍又一遍地重复着。 似乎scanf由于某种原因设置了一些默认值…无法弄清楚原因。 在程序停止之前我没有看到任何东西所以我认为它可能与printf没有被冲洗有关,但我确保使用\ n强制刷新。 有任何想法吗? #include const int MIN_PER_HOUR = 60; // minutes per hour int main(void) { int hour, min, left; printf(“Convert minutes to hours and minutes!\n”); printf(“Enter the number of minutes ( 0){ hour = min / MIN_PER_HOUR; // truncated number of hours left = min % MIN_PER_HOUR; // number of […]

%*。* d如何在printf()中工作?

#include int main() { printf(“%*.*d\n”, -6 , 7,20000); printf(“%*.*d\n”, 5, -6, 2000); return 0; } 输出: 0020000 2000 我不明白printf如何解释格式说明符*。 * ? 在第一次调用printf() ,后面的7是否会覆盖前者-6 ? 那么输出宽度的大小变为7?

结构数组 – 删除/添加元素和打印

对于以下代码 struct orderSlip { char source[64]; char destination[64]; char item[64]; int position; }; //global struct orderSlip data[100]; 除了以下方法之外,还有其他方法可以打印出每个元素的数据: printf(“%s\n”,data[0].source); printf(“%s\n”,data[0].destination); printf(“%s\n”,data[0].item); printf(“%i\n\n”, data[0].position); printf(“%s\n”,data[1].source); printf(“%s\n”,data[1].destination); printf(“%s\n”,data[1].item); printf(“%i\n”, data[1].position); 等等 for(int n = 0; n< 3; n++) { printf("%s\n",data[n].source); printf("%s\n",data[n].destination); printf("%s\n",data[n].item); printf("%i\n\n", data[n].position); } 要删除和添加,我是否必须创建一个动态的结构数组? 如果是这样,最简单的语法是什么? 像这个c ++代码的东西 int * bobby; bobby = new int [5]; […]

如何打印出IEEE754号码(没有printf)?

出于这个问题的目的,我没有能力使用printf工具(遗憾的是,我无法告诉你原因,但我们现在只想假设我知道我在做什么)。 对于IEEE754单精度数,您有以下位: SEEE EEEE EFFF FFFF FFFF FFFF FFFF FFFF 其中S是符号, E是指数, F是分数。 打印标志对于所有情况都相对容易,因为捕获所有特殊情况,如NaN ( E == 0xff, F != 0 ), Inf ( E == 0xff, F == 0 )和0 ( E == 0, F == 0 ,被认为是特殊的,因为在这种情况下不使用指数偏差)。 我有两个问题。 第一个是如何最好地将非规范化数字(其中E == 0, F != 0 )转换为标准化数字(其中1 <= E <= 0xfe )? 我怀疑这对于简化下一个问题的答案是必要的(但我可能是错的,所以随时教育我)。 第二个问题是如何打印标准化数字。 我希望能够以两种方式打印它们,指数如-3.74195E3和非指数如3741.95 […]

`asprintf`是线程安全的吗?

GNU函数asprintf (打印到分配的字符串)线程安全吗? (IIC,基本上,这归结为malloc是否是线程安全的问题。) 考虑示例代码: #define _GNU_SOURCE #include #include “getValue.h” char * getValue(int key) { char * value; asprintf(&value, “%d”, key); // TODO: No error handling! // If memory allocation wasn’t possible, or some other error occurs, these functions will // return -1, and the contents of strp is undefined. return value; } 在这里,我不触及任何全局变量。 如果我的getValue在并发线程中被调用怎么办? 没有坏事会发生,他们会吗?

与vsprintf和va_list的平台不一致

背景:我目前正在尝试“扩展”标准C格式,支持处理某个结构,类似于Objective-C扩展C格式以允许支持带有“%@”序列的NSString。 我正在努力解决的一个问题是vsprintf在OS X和Linux上的表现似乎不同(我用Ubuntu 10.10和12.04测试过)。 在OS X上,它表现得我认为应该如何,在调用vsprintf之后,调用va_arg返回ms指针(好像vsprintf函数调用va_arg来获取5)。 但是,在Linux上,va_list不会从vsprintf更改,并且调用va_arg将返回5。 我真的想找到一种方法来实现这个function,以便它在不同平台上表现一致。 假设您可以期望vsprintf始终更改va_list中的指针以便下次调用va_arg它返回下一个尚未使用的参数时,这是错误的吗? 我尽可能地简化了我的代码来演示这个问题。 在OS X上,此代码打印从malloc返回的指针的正确地址。 在Linux上,foo中ms的值变为5,因此它打印5。 #include #include #include #include static void foo(void *, …); typedef struct { char *value; } mystruct; int main(int argc, char *argv[]) { mystruct *ms = malloc(sizeof(mystruct)); foo(NULL, “%d %@”, 5, ms); } void foo(void *dummy, …) { va_list args; va_start(args, dummy); char […]

printf / sprintf编译器警告是否有概念上的突破?

我注意到,当printf / sprintf函数的格式字符串中的转换说明符与相应参数的类型或计数不匹配时,大量C编译器会发出警告。 在我看来,这似乎是一个概念上的突破,因为根据语言规范,C没有内置函数。 所有编译器都应该知道printf / sprintf是他们的原型而不是他们的语义。 我知道printf / sprintf是标准的C函数,但是它们存在于一个单独的库libc中,你必须包含stdio.h才能导入它们的原型。 许多编译器所做的是分析格式字符串,该格式字符串也可以在运行时提供。 以上是否有意义?

有没有办法在控制台中打印不向下滚动的东西? (在C中)

好吧,也许如果我提供一些上下文,这将更容易理解。 我想在我的主要的第一行打印“库存”,但我不希望“库存”从其位置移动,因此,当我的其他命令显示在控制台中,并且将向下滚动时,此特定行“库存将保持不变。” http://sofzh.miximages.com/c/hVItr.png 我不确定这是否可以在C中完成

在C中的数字之间插入空格

我怎样才能获得像123456这样的数字并将其打印为1 2 3 4 5 6 ?