我应该向用户询问一个3位数字,然后用该数字替换每个数字加上6个模数10,然后将所有更新数字相加.当我运行程序时,它在输入数字后崩溃,警告:
格式%d需要类型为'int*'的参数,但参数2的类型为int.
这是我的源代码:
#includeint 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来替换每个数字.那么我的代码中是否存在数学错误?
几个地方:
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
,你可以在这里进一步阅读:函数'getch'的隐式声明.
完成这些修复后,您的程序运行没有错误.让我调用固定的源文件z.c
,
gcc -std=gnu99 -O2 -o z z.c ./z
如果我输入304
,我会21
.
附加说明:
你想Divider
成为100
,10
,1
,而不是1000
,100
,10
?