我是初学者,我正在学习C和C ++。我试图在Visual Studio 2012 Express for Windows桌面中运行此代码。这是一个简单的计算器代码,我自己写的!但每当我运行它时,我都会收到此错误Unhandled exception at 0x519600B4 (msvcr110d.dll) in Calculator.exe: 0xC0000005: Access violation writing location 0x00000000.
原谅我有任何错误(这是我第一次)。谢谢!
#include<stdio.h>
#include<conio.h>
main ()
{
int num1, num2, result;
char oper;
scanf_s("%d%c%d", &num1, &oper, &num2);
switch(oper)
{
case '+':
result = num1 + num2;
printf("%d", result);
break;
case '-':
result = num1 - num2;
printf("%d", result);
break;
case '*':
result = num1 * num2;
printf("%d", result);
break;
case '/':
result = num1 / num2;
printf("%d", result);
break;
default:
printf("ERROR: INVALID OR UNRECOGNISED INPUT\n");
break;
}
_getch();
}
答案 0 :(得分:15)
使用scanf_s
时,对于%c
格式字符串,您必须指定要读取的字符数:
scanf_s("%d%c%d", &num1, &oper, 1, &num2);
documentation描述了要求:
与scanf和wscanf不同,scanf_s和wscanf_s要求为所有包含在[]中的c,C,s,S或字符串控件集的输入参数指定缓冲区大小。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。