Tag: printf

sprintf缓冲区大小

我是新手程序员,但通常我可以解开自己的问题。 这次我解决了这个问题,但它仍然让我感到困惑。 一位朋友建议我问这个社区的意见。 我正在尝试用C打印数字。我有一个使用sprintf执行此操作的function。 数字永远不应超过2位数,所以我使用2个字符的缓冲区。 不知何故,这是我的逻辑失败的原因,因为这会通过修改传递给sprintf的变量之一而导致无限循环,但增加缓冲区大小可以解决问题。 这是失败的代码: #include void printarray(int array[][4]) { int y; int z; char buf[2]; for (y=0; y<4; y++) { for (z=0; z<4; z++) { sprintf(buf, "%d", array[y][z]); printf("buf is %s, y is %d and z is %d\n",buf,y,z); } } } int main() { int arr[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0} }; printarray(arr); return […]

面试问题打印浮点数

以下程序的输出是什么?为什么? #include int main() { float a = 12.5; printf(“%d\n”, a); printf(“%d\n”, *(int *)&a); return 0; } 我的编译器打印0和1095237632.为什么?

printf语句中转换的百分比如何?

也许这不属于SO,但我不知道在哪里。 我必须用C重新实现printf(3)而不使用任何可以为我做转换的函数,我差不多完成了,但是我被困在%a ,我真的不明白这里发生了什么,例如: printf(“%a\n”, 3.0); //#=> 0x1.8p+1 printf(“%a\n”, 3.1); //#=> 0x1.8cccccccccccdp+1 printf(“%a\n”, 3.2); //#=> 0x1.999999999999ap+1 printf(“%a\n”, 3.3); //#=> 0x1.a666666666666p+1 printf(“%a\n”, 3.4); //#=> 0x1.b333333333333p+1 printf(“%a\n”, 3.5); //#=> 0x1.cp+1 printf(“%a\n”, 3.6); //#=> 0x1.ccccccccccccdp+1 我当然读到了那个说: double参数被舍入并在样式[ – ] 0xh.hhhp [+ – ] d中转换为hex表示法,其中hex点字符后面的位数等于精度规范。 但这并没有真正帮助我不理解将3.2转换为1.999999999999ap+1 我不需要任何代码,但更多的解释。 PS:如果这不是这个问题的地方,你可以指引我到正确的地方吗? 编辑:虽然@juhist答案适用于数字> = 1.0但它没有解释如何获得0.0和1.0之间的数字的结果: printf(“%a\n”, 0.01); //#=> 0x1.47ae147ae147bp-7 printf(“%a\n”, 0.1); //#=> 0x1.999999999999ap-4 printf(“%a\n”, […]

printf with%s包含空字符

我需要连接一些字符串,我需要包含NULL字节。 我不想将’\ 0’视为终止字节。 我想保存我宝贵的NULL字节! 在代码示例中,如果 char *a = “\0hey\0\0”; 我需要以输出“\ 0hey \ 0 \ 0”的格式printf。 -AUstin

putchar()vs printf() – 有区别吗?

我目前在第1.5.1章文件复制中并制作了如下程序: #include /* copy input to output; 1st version */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } } 如果我像这样运行它: PS cc copy-0.c PS ./a Black Black White White Gray Gray 输出是我输入的。 这是我为实验目的而制作的一个程序: #include /* copy input to output; 1st version */ main() { int c; […]

在’printf’之后使用’fgets’作为’fgets’在C语言中出现’fgets’在’printf’之前运行

可能重复: 除非换行符在格式字符串中,为什么printf在调用后不会刷新? (在C中) 我在使用printf和fgets时遇到问题,因为在我的代码中, printf写入fget,但它没有运行,它在fgets运行后运行。 enum { max_string = 127 }; static char string[max_string+1] = “”; int main( int argc, char ** argv ) { printf(“Type a String: “); fgets(string, max_string, stdin); printf(“The String is %s\n”, string); return 0; }

为什么printf将8位字符填充到32位?

char byte = 0xff; printf(“%lu\n”, sizeof(byte)) // Output is ‘1’ printf(“%x\n”, byte); // Output is ‘ffffffff’ 如果byte的大小只有一个字节,那么为什么printf()行为就像四个字节一样?

在printf中用星号填充?

我搜索过高和低,但在C中的printf中,似乎只有零填充和空白填充。 我想写自己的填充,在这种情况下使用星号。 例如, 假设宽度为8个字符。 输入: 123输出: **123.00 输入: 3输出: ****3.00 我怎样才能做到这一点?

在c中添加到字符串末尾的额外字符

所以我试图在C中打印出一个字符串,当我打印出来时,我总是在字符串的末尾获得额外的字符。 代码: char binaryNumber[16] = “1111000011110000”; printf(“binary integer: %s\n”, binaryNumber); 输出: 二进制整数:1111000011110000▒▒▒▒ 能帮我弄清楚为什么会这样吗? 我认为这是我的代码中其他一些问题的根源。 在我以更复杂的方式创建字符串之前我遇到了这个问题,并且在这种情况下也获得了额外的字符,但它们是不同的。 所以我用最基本的方法制作了一个字符串(这里显示的方法),我仍然遇到问题

如何在c中正确printf整数和字符串?

我有以下代码: char *s1, *s2; char str[10]; printf(“type a string: “); scanf(“%s”, str); s1 = &str[0]; s2 = &str[2]; printf(“%s\n”, s1); printf(“%s\n”, s2); 当我运行代码时,输​​入输入“A 1”如下: type a string: A 1 我得到以下结果: A < 我正在尝试将第一个字符作为字符串读取,将第三个字符作为整数读取,然后在屏幕上打印出来。 第一个角色总是有效,但屏幕只会在那之后显示随机的东西….我该如何解决? 谢谢