C

时间:2017-01-13 20:50:43

标签: c compiler-errors scanf

我应该向用户询问一个3位数字,然后用该数字替换每个数字加上6个模数10,然后将所有更新数字相加。当我运行程序时,它在输入数字后崩溃,警告:

  

格式%d需要类型' int *'的参数但参数2的类型为int。

这是我的源代码:

#include <stdio.h>

int main(int argc, char* argv[])
{
   int Integer;
   int Divider;
   int Digit1, Digit2, Digit3;

   printf("Enter a three-digit integer: ");
   scanf("%d", Integer);

   Divider = 1000;
   Digit1 = Integer / Divider;

   Integer = Integer % Divider;
   Divider = 100;
   Digit2  = Integer / Divider;

   Integer = Integer % Divider;
   Divider = 10;
   Digit3  = Integer / Divider;


      Digit1 = (Digit1 + 6) % 10;
      Digit2 = (Digit2 + 6) % 10;
      Digit3 = (Digit3 + 6) % 10;

   printf(Digit3 + Digit1 + Digit2);

   getch();
   return 0;
}

更新

在我们的示例输出中,如果用户输入928,则结果数字应为584。我不确定这个号码是怎么做的。它应该用该数字的总和加上6模数10来替换每个数字。那么我的代码中是否存在数学错误?

3 个答案:

答案 0 :(得分:5)

有几个地方:

scanf("%d", &Integer);
printf("%d\n", Digit3 + Digit1 + Digit2);
getchar();  // maybe??

事实上,编译器会为你清楚地指出它们:

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
    scanf("%d", Integer);
    ^

warning: passing argument 1 of ‘printf’ makes pointer from integer without a cast [enabled by default]
    printf(Digit3 + Digit1 + Digit2);
    ^

warning: implicit declaration of function ‘getch’ [-Wimplicit-function-declaration]
    getch();
    ^

注意,关于getch,您可以在此处进一步阅读:implicit declaration of function 'getch'

完成这些修复后,您的程序可以正常运行。我来调用固定源文件z.c

gcc -std=gnu99 -O2 -o z z.c
./z

如果我输入304,我会收到21

附加说明:

您希望Divider成为100101,而不是100010010

答案 1 :(得分:2)

当您使用scanf将值读入变量时,您需要传递变量的地址,以便scanf可以更改变量的值。

scanf("%d", &Integer);

&amp; sign传递变量的地址。

答案 2 :(得分:0)

欢迎来到C,希望你会喜欢它。

您似乎忘记了&。 请scanf("%d", &Integer)代替scanf("%d", Integer)。在C中,大多数变量被引用为指针,因此当您希望通过scanf分配整数或浮点数时,必须使用“&amp;”这将是顺从它。