Tag: printf

printf如何处理float参数与处理double参数的方式完全相同?

直到最近,我才想到: printf(“%f”,x)将尝试从堆栈中读取4字节的浮点值。 printf(“%lf”,x)将尝试从堆栈中读取8字节的浮点值。 但是,下面的代码似乎产生了正确的输出: float f = 1234.5; double d = 12345678.9; printf(“Output = %u %u\n”,sizeof(f),sizeof(d)); // Output = 4 8 printf(“Output = %.1f %.1f\n”,f,d); // Output = 1234.5 12345678.9 我相信它certificateprintf(“%f”,x)从堆栈中读取一个8字节的浮点值。 这是因为两个值都正确打印,但12345678.9太大而无法放入4字节变量。 现在我的问题是:当使用4字节float变量调用printf时,编译器如何知道它应该在将其推入堆栈并调用printf之前将其转换为8字节的double值? 在调用带浮点参数的函数时,这是标准的一部分吗? 谢谢

对getchar和scanf感到困惑

我对getchar()和scanf()的使用感到困惑。 这两者有什么区别? 我知道scanf() [和family]从用户[或文件]中逐个字符地获取并将其保存到变量中,但它会立即执行此操作还是在按下某些内容( Enter )后执行此操作? 我真的不明白这段代码,我看到很多代码使用了getchar() ,它们都让你在屏幕上输入你想要的任何内容并且没有响应,但是当你按enter键时它会退出。 int j, ch; printf(“please enter a number : \n”); while (scanf(“%i”, &j) != 1) { while((ch = getchar()) != ‘\n’) ; printf(“enter an integer: “); } 在这段代码中我不能用scanf()来逐个字符地获取并测试它吗? 此外,这条线是什么意思? scanf(“%i”, &j) != 1 因为当我按下1时,按下2时它没有什么不同? 这件作品是做什么的? 当这条线发生的时候? printf(“enter an integer: “); 因为它永远不会发生

无限缓冲区printf – 格式化直接放入流

我的理解是printf的大多数实现依赖于类似的东西 vsnprintf( _acBuffer[0], sizeof( _acBuffer[0] ), pcFormat, *ptArgList ); 实际处理格式,然后通过puts将它们输出到流。 是否有任何实现可以最小化_acBuffer [0]的大小,同时保持打印所有字符串的能力? 显然是这样的: printf(“%s”, pcReallyLongString); 会是个问题。 非常感谢您的想法!

execl之前的打印在输出中不可见

#include #include #include #include #include int main(void) { pid_t Checksum_pid = fork(); if (Checksum_pid 0) { if (WIFEXITED(childStatus)) printf(“\nChild Exit Code: %d\n”, WEXITSTATUS(childStatus)); else printf(“\nChild Exit Status: 0x%.4X\n”, childStatus); } else if (returnValue == 0) printf(“\nChild process still running\n”); else { if (errno == ECHILD) printf(“\nError ECHILD!!\n”); else if (errno == EINTR) printf(“\nError EINTR!!\n”); else […]

如何在C 中打印中心对齐的字符串

任何人都可以帮我打印C中心对齐的string吗? 例如: int main() { int a = 20; char x[10] = “Hello”; char y[10] = “Hello”; printf (“%*s\n”,a, x ); printf (“%-*s\n”,a,y); } 在上面,第一个打印Hello向右对齐,第二个printf向左对齐,如下所示 Hello Hello 限制每个人的长度为20。 有没有办法打印Hello对齐到中心。 Hello 限制总长度为20。 先感谢您

使用%lu打印int类型 – C + XINU

我有一个给定的代码,在我看来这个代码有问题:我在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,而%di得到26,后者是正确的; 给出变量,给出函数的声明,我写主体但它必须返回int; 我的问题是: 我不熟悉’sprintf’可能有问题吗? 我将unsigned long分配给int然后用%lu打印int,是吗? 我该如何解决这个问题? 提前致谢。 谢谢大家回答。 我只是想提一下我在XINU下工作,我改变了文件编译的顺序和你知道的……它在%lu和%d上工作并显示相同的数字。 我很清楚,将’unsigned long’分配给int然后使用%lu进行打印是不正确的编码,可能会导致数据丢失。 但正如我所说,代码给出,我无法更改变量和打印命令。 我没有错误或警告。 我不知道为什么更改编译顺序修复了问题,如果有人有想法你更欢迎分享。 我要感谢所有试图帮助我的人。

如何从文本文件中写入和读取(包括空格)

我正在使用fscanf和fprintf 。 我尝试用\t分隔每行的字符串,并像这样读取它: fscanf(fp,”%d\t%s\t%s”,&t->num,&t->string1,&t->string2); 文件内容: 1[TAB]string1[TAB]some string[NEWLINE] 它没有正确读取。 如果我printf(“%d %s %s”,t->num,t->string1,t->string2)我得到: 1 string1 some 我也得到这个编译警告: warning: format specifies type ‘char *’ but the argument has type ‘char (*)[15]’ [-Wformat] 如何在不使用二进制r / w的情况下解决这个问题?

如何使用填充正确格式化printf()?

我正在重新创建unix shell命令,目前正在执行ls。 我必须模仿ls -l,它显示权限,文件大小等。 本机ls -l如果格式良好,所以每列保持对齐如下: -rw-r–r– 1 matt matt 1474560 Apr 11 14:54 diskimage drwxr-xr-x 2 matt matt 4096 Mar 25 15:31 Example -rwxr-xr-x 1 matt matt 26375 Apr 12 14:24 final -rwxr-xr-x 1 matt matt 75 Apr 11 14:39 log.sh 现在,我的ls版本几乎完全相同,除了我的列在printf()函数中使用不同的值时没有排列,如下所示: drwxr-xr-x 0 1024 Dec 03 14:11 . drwxr-xr-x 0 1024 Dec 03 […]

为什么我的程序只打印到小数点后6位?

我已经创建了一个程序来计算从零到无穷大的积分值,但是当我打印我的答案时,它只打印到6位小数,有人可以告诉你这是为什么吗? 首先十分感谢 :) #include #include #include double integral_Function(double x){ double value; value = 1/((1+ pow(x, 2))*(pow(x, 2/3))); return value; } double trapezium_Rule(double lower, double upper, int n){ double h; double total; h = (upper – lower)/n; total = (h/2) * (integral_Function(upper) + integral_Function(lower)); for(int i = 1; i < n; i++){ total = total + […]

printf中的格式和参数不一致

对于以下代码: #include int main(){ printf(“%f”, 5); printf(“%d”, 5.01); } 第一个语句将打印0.000000,第二个语句将打印一个大数字。 我认为printf看到格式%f将从堆栈中弹出一个4字节的参数。 然后我查了一些引用,说printf函数会将float转换为double,所以8字节的参数。 所以我认为它可能会打印出不可预测的价值。 但它怎么能打印出0.000000。 第二个也是经过考虑的。 5.01的二进制格式应为0 10000001 01000000101000111101100(0x40A051EC),十进制格式应为1084248556,但语句结果为1889785610.为什么会发生这种情况?