【发布时间】:2024-01-10 19:06:01
【问题描述】:
我应该向用户询问一个 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 的总和来替换每个数字。那么我的代码中是否也存在数学错误?
【问题讨论】:
-
为避免进一步的问题,请勿使用
scanf进行用户输入。请改用fgets。 -
注意C程序不叫脚本;该术语是为没有生成可执行文件的正式编译器的编程语言保留的(例如 shell、Awk、Perl、Python 等)。它们是程序、源文件或类似的东西。
-
不使用
main()的参数时,则使用签名:int main( void ) -
函数:
scanf()需要其参数的地址,因此它知道将转换后的输入放置在何处。所以这一行:scanf("%d", Integer);应该是:scanf("%d", &Integer);另外,请始终检查返回值以确保操作成功。 IE。 `if(1!=scanf("%d", &Integer)) { perror("scanf failed");退出(EXIT_FAILURE); } 注意:在 stdlib.h 中找到 exit() 和 EXIT_FAILURE -
函数:
printf()期望第一个参数是format string所以建议:printf( "%d %d %d", DIgit3, Digit1, Digit2 );
标签: c compiler-errors scanf