我正在尝试制作的计算器应用程序在运行时无法正常工作。它提出了一个奇怪的消息框(见下文)。
#include <stdio.h>
int main()
{
int Pre;
float v1;
float v2;
char op;
printf("Enter precision: ");
scanf_s("%f", &Pre);
if (Pre < 0)
{
printf("Error: negative precision\n");
return 0;
}
printf("Enter expression: ");
scanf_s("%f %c %f", &v1, &op, &v2);
if (op == '+')
{
printf("%f %c %f\n", v1, op, v2);
return 0;
}
return 0;
}
有什么想法吗?
答案 0 :(得分:1)
使用scanf_s
将数据读入char *
或wchar_t *
时,必须指定接受输入的缓冲区大小。
scanf_s("%f %c %f", &v1, &op, 1, &v2);
来源:MSDN on scanf_s。
(注意:scanf_s
是C.11附件K.3.5.3.4中描述的标准C库的可选扩展。)
Matt指出"%f"
是&Pre
的格式说明符不正确,因为Pre
是int
,"%f"
表示参数将是指向float
的指针。使用"%d"
表示参数是指向int
的指针。