首页 > 解决方案 > 警告格式指定类型 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;
}

在此处输入图像描述

标签: c

解决方案


错误来自"%ld"转换说明符之间的不匹配,它需要一个类型的表达式long int和它的实际类型iint. 改用就好"%d"了。

要按升序打印因子,您可以更改循环方向,使irun from1ninclusively。

另请注意,如果确实大于,n则应将其定义为long int以从扩展范围中受益,这在 64 位 linux 和 OS/X 上是这种情况,但在 Microsoft Windows 等旧系统上则不然。longint

这是修改后的版本:

#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;
}

推荐阅读