c - 警告格式指定类型 int 但参数的类型为 long
问题描述
我找不到如何解决这个问题,以及如何获得类似的输出: 4! = 1 * 2 * 3 * 4 = 24
而不是4 * 3 * 2 * 1 * =24
。
warning: format specifies type 'long' but the argument has type 'int' [-Wformat] printf("%ld",i);`
我是代码新手,完全卡住了:
#include <stdio.h>
long int factorial(int);
int main() {
int numb;
printf("Enter number =");
scanf("%d", &numb);
printf("=%ld\n", factorial(numb));
}
long int factorial(int x) {
int i = x, n = 1;
while (i > 0) {
printf("%ld", i);
if (i > 0)
printf("*");
n *= i;
i--;
}
return n;
}
解决方案
错误来自"%ld"
转换说明符之间的不匹配,它需要一个类型的表达式long int
和它的实际类型i
是int
. 改用就好"%d"
了。
要按升序打印因子,您可以更改循环方向,使i
run from1
到n
inclusively。
另请注意,如果确实大于,n
则应将其定义为long int
以从扩展范围中受益,这在 64 位 linux 和 OS/X 上是这种情况,但在 Microsoft Windows 等旧系统上则不然。long
int
这是修改后的版本:
#include <stdio.h>
long int factorial(int);
int main() {
int numb;
printf("Enter number: ");
if (scanf("%d", &numb) == 1) {
printf("%d! = ", numb));
printf(" = %ld\n", factorial(numb));
}
return 0;
}
long int factorial(int x) {
long int n = 1;
int i;
printf("1"); // always print 1
for (i = 2; i <= x; i++) {
printf(" * %d", i); // print other factors
n *= i;
}
return n;
}
推荐阅读
- angular - 角度材料会覆盖内部css吗?
- google-chrome - 作为初学者,我从哪里开始学习编写 chrome 扩展程序?
- c# - 如何使用 BotFramework 发送主动消息,该消息将触发 Teams 警报并显示在“活动”选项卡中?
- python - Pandas - 删除重复项 - 没有属性?
- python - 尝试打印时不显示张量名称
- python - 将列中的科学计数法转换为十进制并将十进制转换为整数而不进行四舍五入
- javascript - 初始化对象时,javascript属性名称中的双方括号有什么意义?
- css - 将鼠标悬停在图像上方时会导致图像比例变大的问题。(我使用ease-in-out,但在“out”中它并不像我想要的那样慢)
- c# - 如何让集成测试项目使用不同的连接字符串?
- java - 在 Spring MVC 项目中使用休眠验证器分组跳过一些更新场景所需的验证