Tag: printf

有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

我有一个接受字符串(char数组)作为参数的函数。 void enterString(char * my_string); 使用此function时,我经常发现自己想要输入格式化的字符串。 我使用sprintf来做到这一点。 但是,每次我必须创建一个临时字符串有点烦人: char temp_str[100]; sprintf(temp_str, “My lucky number = %d”, 11); enterString(temp_str); 有没有办法在函数参数中直接格式化字符串,所以我不必每次都创建一个临时字符串? 就像是: enterString(“My lucky number = %d”, 11); 谢谢

简单的程序将“D”添加到输出

我有一个非常简单的程序,只是将换行符的数量打印为整数,并在每个数字后得到一个“D”。 样本输入: d [输入] e [输入] f [输入] Ctrl-D [输入] 样本输出: 3D 我究竟做错了什么? 这是C编程语言第2版的逐字记录。 19: #include main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == ‘\n’) ++nl; printf(“%d\n”, nl); }

设置精度和剪辑尾随零但从不打印指数

我需要: 设置精度,使浮点数舍入到百分位数(0.111打印为0.11) 剪辑尾随零(1.0打印为1) 永远不要打印指数(1000.1打印为1000.1) printf( “%.2f\n”, input ); // handles 1 and 3 but not 2 printf( “%.2g\n”, input ); // handles 1 and 2 but not 3 cout << setprecision( 2 ) << input << endl; // handles 1 and 2 but not 3 是否有printf或cout选项可以让我处理所有这些?

如何使用strtok()

我正在编写一个C程序来研究strtok()用法的用法。 这是我的代码: #include #include main() { char abc[100] = “ls &”; char * tok; tok = strtok(abc, ” “); while(tok!=NULL) { printf(“%s”, tok); tok = strtok(NULL, ” “); } printf(“\n\n\n\n\n%s”, tok); return 0; } 它打印以下输出: ls& (null) 但我希望它在第二个printf声明中打印’&’。 我该怎么做? 我需要这部分作为我的作业项目。 谁能帮我吗? 先感谢您! 🙂

C中的unsigned int表现为负数

我不明白为什么unsigned int的输出对于以下代码是负的。 就像一个签名的int。 uint32_t yyy=1<<31; printf("%d\n",yyy); 输出是: -2147483648 这是-2^31 。

printf不产生输入值

我有以下代码块。 最后一行用于产生用户输入的X , Y和P值的值。 但它只会返回 (0,0,0) 而不是用户给出的值。 我错过了什么? printf(“What is the robot’s initial X position? (cm)\n”); scanf(“%f”,&X); printf(“What is the robot’s initial Y position? (cm)\n”); scanf(“%f”,&Y); printf(“What is the robot’s initial angular position? (degrees)\n”); scanf(“%f”,&P); printf(“The initial position is (%d, %d, %d)\n”, X,Y,P);

sprintf()的输入和输出字符串可以相同吗?

我在过去的代码中多次使用过这种类型的约定: strcpy ( cTmpA, “hello” ); sprintf ( cTmpA, “%s world”, cTmpA ); 最近我将我的旧C编译器切换到Visual Studio 2005,发现我得到了一个由上面的代码产生的乱码。 然后我想到,sprintf()的行为可能没有严格定义,其中一个输入与输出字符串匹配。 以上代码是否有效K&R C? 如果没有,我如何在我的代码中找到sprintf()发生此类调用的所有位置?

printf如何处理其参数?

printf如何处理其参数? 我知道在C#中我可以使用params关键字来做类似的事情,但我无法在C中完成它?

为什么参数与printf未定义的行为中的转换说明符不匹配?

在C(n1570 7.21.6.1/10)和C ++(通过包含C标准库)中,为printf提供参数是未定义的行为,其类型与其转换规范不匹配。 一个简单的例子: printf(“%d”, 1.9) 格式字符串指定int,而参数是浮点类型。 这个问题的灵感来自一个用户遇到遗留代码的问题,这些代码存在大量的转换不匹配,这显然没有任何损害,参见 理论上和实践中未定义的行为 。 声称格式不匹配UB起初看起来很激烈。 很明显, 输出可能是错误的,具体取决于精确的不匹配,参数类型,字节序,可能的堆栈布局和其他问题。 正如一位评论员指出的那样,这也延伸到后来的(甚至是之前的?)论点。 但这远不是一般的UB。 就个人而言,除了预期的错误输出外,我从未遇到任何其他问题 冒险猜测,我会排除对齐问题。 我能想象的是提供一个格式字符串,使printf期望大数据和小的实际参数可能让printf读取超出栈,但我缺乏对var args机制和特定printf实现细节的深入了解来validation。 我快速浏览了printf源代码 ,但它们对于休闲读者来说非常不透明。 因此我的问题是:在printf中错误匹配转换说明符和参数的具体危险是什么使它成为UB?

为什么printf()在打印多个字符串(%s)时会留下换行符以及如何解决这个问题?

我制作了一个接受字符串(名字/姓氏)的程序,而不是典型的输出 Phil Snowken 3岁,我快到了 菲尔 Snowken 3岁 #include #define N 10 struct data{ char fname[30]; char lname[30]; int age; }; main() { int i; struct data base[N]; for(i=0;i<N;i++){ printf("\n————————-"); printf("\nPeople Data(%d remaining)\n",Ni); printf("—————————\n\n"); printf("\nFirst Name "); fgets(base[i].fname,30,stdin); printf("\nLast Name "); fgets(base[i].lname,30,stdin); printf("\nAge "); scanf(" %d",&(base[i].age)); fflush(stdin); } for(i=0;i<N;i++) printf("%s %s Year:(%d)",base[i].fname,base[i].lname,base[i].age); return 0; }