#define SIZE 9
int number=5;
char letters[SIZE]; /* this wont be null-terminated */
...
char fmt_string[20];
sprintf(fmt_string, "%%d %%%ds", SIZE);
/* fmt_string = "%d %9d"... or it should be */
printf(fmt_string, number, letters);
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
我目前使用一个显式的长和使用%ld打印pid_t,有一个符如%z用于size_t为pid_t?
如果没有什么最好的印刷方式pid_t?
我希望能够编写一个如下所示的时间字符串:1:04:02.1 hoursusing printf.
当我尝试写这样的东西时:
printf("%d:%02d:%02.1f hours\n", 1, 4, 2.123456);
Run Code Online (Sandbox Code Playgroud)
我明白了:
1:04:2.1 hours
Run Code Online (Sandbox Code Playgroud)
是否可以将前导零添加到浮点格式?
我每天都有一个自动生成的文件,由shell脚本调用.但是,我面临的问题是自动生成的文件有以下形式:
FILE_MM_DD.dat
Run Code Online (Sandbox Code Playgroud)
...其中MM和DD是2位数月份和日期字符串.
我做了一些研究,并自己打了它,但我不知道如何只使用shell脚本创建这些自定义字符串.
要清楚,我知道Bash中的DATE函数,但我正在寻找的是C中的SPRINTF函数的等价物.
是否可以在C中格式化浮点数,如果使用printf与0不同,则最多只能显示2个小数位?
例如:
12 => 12
12.1 => 12.1
12.12 => 12.12
我试过用:
float f = 12;
printf("%.2f", f)
Run Code Online (Sandbox Code Playgroud)
但我明白了
12 => 12.00
12.1 => 12.10
12.12 => 12.12
我开始用C语言了.我使用eclipse(juno)作为我的IDE并安装了CDT插件.我还解压缩了mingw64(GCC编译器).我写了一个非常简单的程序,看它是否有效.这是我的代码:
#include <stdio.h>
int main()
{
int age;
printf("Hello, please enter your age:\n");
scanf("%d", &age);
printf("Your age is %d", age);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是输出缓冲区填充了第一个字符串的值,printf但不会将其输出到控制台.我必须输入一个数字,然后只有缓冲区将所有数据倒入控制台,所以我看到控制台是这样的:
1
Hello, please enter your age:
Your age is 1
Run Code Online (Sandbox Code Playgroud)
而不是预期的:
Hello, please enter your age:
1
Your age is 1
Run Code Online (Sandbox Code Playgroud)
现在,我发现我可以fflush(stdout)在第一个之后使用,printf但我不认为这个解决方案是优雅的,甚至是必要的.关于如何克服这个问题的任何想法?
编辑 - 因为我在大学里学习这个,我不能使用课程中没有学到的东西,所以我只能使用printf和scanf
新编辑 - 我想我已经找到了解释.正如我所说,我正在输出到Eclipse内的控制台视图.奇怪的是,如果我从Windows的命令行编译并运行程序,我得到想要的结果.因此,我认为eclipse实际上是将输出写入文件并在控制台窗口中显示.如何强制eclipse在我的运行配置中打开一个真正的命令行窗口?
假设我在C中有以下代码:
double var;
scanf("%lf", &var);
printf("%lf", var);
printf("%f", var);
Run Code Online (Sandbox Code Playgroud)
它从stdin变量'var'读取,然后在stdout'var'中打印两次.我理解你是如何从stdin读取双变量的,但我的问题是:
我正在寻找一个sprintf() - 类似于自动分配所需内存的函数的实现.所以我想说
char* my_str = dynamic_sprintf( "Hello %s, this is a %.*s nice %05d string", a, b, c, d );
Run Code Online (Sandbox Code Playgroud)
和my_str检索保存此sprintf()结果的已分配内存的地址.
在另一个论坛中,我读到这可以像这样解决:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char* ret;
char* a = "Hello";
char* b = "World";
int c = 123;
int numbytes;
numbytes = sprintf( (char*)NULL, "%s %d %s!", a, c, b );
printf( "numbytes = %d", numbytes );
ret = (char*)malloc( ( numbytes + 1 ) * sizeof( char ) );
sprintf( ret, …Run Code Online (Sandbox Code Playgroud) 可能重复:
是否有printf转换器以二进制格式打印?
这是我的计划
#include<stdio.h>
int main ()
{
int i,a=2;
i=~a;
printf("a=%d\ni=%d\n",a,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
a=2
i=-3
Run Code Online (Sandbox Code Playgroud)
我希望这个以二进制打印.%x,%o和%d是十六进制,八进制和十进制数,但是什么用于在printf中打印二进制文件?
我printf在程序结束时发表了这样的声明:
printf("%d", total_candies);
Run Code Online (Sandbox Code Playgroud)
total_candies是一个int,虽然我希望一切正常,但实际数字,我最终得到一个奇怪的百分号.

谁能告诉我为什么会这样?