默认情况下,printf()似乎将字符串对齐到右侧.
printf("%10s %20s %20s\n", "col1", "col2", "col3");
/* col1 col2 col3 */
Run Code Online (Sandbox Code Playgroud)
我也可以像这样对齐左边的文字:
printf("%-10s %-20s %-20s", "col1", "col2", "col3");
Run Code Online (Sandbox Code Playgroud)
有没有快速的方法来中心文本?或者,如果该列的文本宽度为8,我是否必须编写一个将字符串test转换为的函数(space)(space)test(space)(space)?
我正在查看类似于以下的代码行:
sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);
Run Code Online (Sandbox Code Playgroud)
我认为符号字符串是指每小时,每分钟等显示的数字字符数 - 或类似的东西,我不完全确定.
通常我可以想出这种事情,但我一直无法在谷歌上找到任何有用的参考搜索"%02d%01d".谁能够为我揭开这一点?
使用printfC在C 标准输出中打印制表符时,会输出一些空格,显示长度为4个字符.
printf("\t");
Run Code Online (Sandbox Code Playgroud)
在上述情况下,有什么办法可以控制标签宽度吗?任何帮助或建议表示赞赏.
我file.txt看起来像这样:
1 12
2 18
3 45
4 5
5 71
6 96
7 13
8 12
Run Code Online (Sandbox Code Playgroud)
我可以这样总结第二列:
awk '{ sum += $2 } END { print sum }' file.txt
272
我能在每一行打印这笔钱的最好方法是什么?这就是我所期待的:
1 12 272
2 18 272
3 45 272
4 5 272
5 71 272
6 96 272
7 13 272
8 12 272
Run Code Online (Sandbox Code Playgroud) 这段代码:
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc,char **argv)
{
uint64_t val=1234567890;
printf("%"PRId64"\n",val);
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
根据GCC 4.5,适用于C99,C++ 03,C++ 11,但根据GCC 4.7.1,在C++ 11上失败.在PRId64GCC 4.7.1编译之前添加空格.
哪一个是正确的?
我有一个数组巫婆匹配字符串占位符如下:
"some text %s another text %s extra text %s"
Run Code Online (Sandbox Code Playgroud)
和数组:
$array[0] match the first %s
$array[1] match the second %s
$array[2] match the third %s
Run Code Online (Sandbox Code Playgroud)
我认为可以使用sprintf函数完成如下:
$content = sprintf("some text %s another text %s extra text %s", $array);
Run Code Online (Sandbox Code Playgroud)
但这会返回太少的参数错误,我试图使用implode:
$content = sprintf("some text %s another text %s extra text %s", implode(",",$array));
Run Code Online (Sandbox Code Playgroud)
提前致谢
我经常会遇到我想要printf使用整数类型的实现定义大小(如ino_t或time_t)的值进行打印的情况.现在,我使用这样的模式:
#include <inttypes.h>
ino_t ino; /* variable of unknown size */
printf("%" PRIuMAX, (uintmax_t)ino);
Run Code Online (Sandbox Code Playgroud)
这种方法到目前为止有效,但它有一些缺点:
有更好的策略吗?
出于某种原因,加入\n到printf()改变的下面的代码的行为.没有\n打印(null)的代码而\n导致的代码Segmentation fault.
Printf.c
#include <stdio.h>
int main(int argc, char* argv[]){
printf("%s", argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
Printf.c - 输出
$ gcc -o Printf Printf.c
$ ./Printf
(null)
Run Code Online (Sandbox Code Playgroud)
Printf_Newline.c
#include <stdio.h>
int main(int argc, char* argv[]){
printf("%s\n", argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
Printf_Newline.c - 输出
$ gcc -o Printf_Newline Printf_Newline.c
$ ./Printf_Newline
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
我很想知道这背后的原因.
在Ruby中编写一个用零填充的整数是很容易的:
sprintf( "%010d", 345 ) #=> "0000000345"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试用零填充String时,我找不到一个简单的解决方案:
sprintf( "%010d", "12AD" ) #=> ArgumentError: invalid value for Integer(): "12AD"
sprintf( "%010s", "12AD" ) #=> " 12AD"
Run Code Online (Sandbox Code Playgroud)
我想获得:
sprintf( "%010s", "12AD" ) #=> "00000012AD"
Run Code Online (Sandbox Code Playgroud)