run time error: debug assertion failed
run time error: debug assertion failed
我正在编写一个在 cmd 上运行的计算器。我基本上完成了 +、-、/、* 操作和两个数字,但我有这个错误。我查找了这个错误,但所有文档都是关于文件函数的。我不使用文件功能。但我仍然收到此错误:
调试断言失败!
程序: ...所有studio2012 ....
file:f:\dd\vctools\crt_bld\self_x86\crt\srt\strtol.c
line:94
表达式:nptr !=NULL
代码是:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char define(char input[]);
float math(int sayi[], char operation);
void main()
{
int sayi[100];
char input[100];
char inputCpy[100];
const char functions[] = "+,-,/,*";
char *token;
char operation;
float result;
int i=1;
printf("welcome to my simple cmd calculator!\n what do you want to know?\n");
scanf("%s", input);
strcpy(inputCpy,input);
token = strtok(input, functions);
sayi[0]=atoi(token);
while( token != NULL )
{
token = strtok(NULL, functions);
sayi[i]=atoi(token);
i++;
}
printf ("sayi1=%d sayi2=%d", sayi[0], sayi[1]);
operation = define(inputCpy);
printf("operation = %c\n", operation);
result = math(sayi,operation);
printf ("result = %.2f\n", result);
system("pause");
}
char define(char input[])
{
char operation;
for (int i=0; i<strlen(input); i++)
{
if(!isdigit(input[i]))
{
operation = input[i];
break;
}
}
return operation;
}
float math(int sayi[], char operation)
{
float result=0;
switch(operation)
{
case '+':
result = sayi[0]+sayi[1];
break;
case '-':
result = sayi[0]-sayi[1];
break;
case '*':
result = sayi[0]*sayi[1];
break;
case '/':
if(sayi[1]!='0')
{
result = sayi[0]/sayi[1];
}
else
{
printf ("wtf!! you can't divide by 0!");
}
break;
default:
printf("did you mean \"i don't know maths\"");
}
return result;
}
token = strtok(input, functions);
您需要检查 strtok
的 return 值,否则您可能会将空指针传递给 atoi
。稍后在您的代码中使用 token = strtok(NULL, functions);
调用atoi(token)
前需要检查token
是否为NULL
。
更改行:
token = strtok(input, functions);
sayi[0]=atoi(token);
while( token != NULL )
{
token = strtok(NULL, functions);
sayi[i]=atoi(token); // token will eventually be NULL
// and you run into a problem here.
i++;
}
至:
token = strtok(input, functions);
i = 0;
while( token != NULL )
{
sayi[i]=atoi(token);
token = strtok(NULL, functions);
i++;
}
我正在编写一个在 cmd 上运行的计算器。我基本上完成了 +、-、/、* 操作和两个数字,但我有这个错误。我查找了这个错误,但所有文档都是关于文件函数的。我不使用文件功能。但我仍然收到此错误:
调试断言失败! 程序: ...所有studio2012 .... file:f:\dd\vctools\crt_bld\self_x86\crt\srt\strtol.c line:94
表达式:nptr !=NULL
代码是:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char define(char input[]);
float math(int sayi[], char operation);
void main()
{
int sayi[100];
char input[100];
char inputCpy[100];
const char functions[] = "+,-,/,*";
char *token;
char operation;
float result;
int i=1;
printf("welcome to my simple cmd calculator!\n what do you want to know?\n");
scanf("%s", input);
strcpy(inputCpy,input);
token = strtok(input, functions);
sayi[0]=atoi(token);
while( token != NULL )
{
token = strtok(NULL, functions);
sayi[i]=atoi(token);
i++;
}
printf ("sayi1=%d sayi2=%d", sayi[0], sayi[1]);
operation = define(inputCpy);
printf("operation = %c\n", operation);
result = math(sayi,operation);
printf ("result = %.2f\n", result);
system("pause");
}
char define(char input[])
{
char operation;
for (int i=0; i<strlen(input); i++)
{
if(!isdigit(input[i]))
{
operation = input[i];
break;
}
}
return operation;
}
float math(int sayi[], char operation)
{
float result=0;
switch(operation)
{
case '+':
result = sayi[0]+sayi[1];
break;
case '-':
result = sayi[0]-sayi[1];
break;
case '*':
result = sayi[0]*sayi[1];
break;
case '/':
if(sayi[1]!='0')
{
result = sayi[0]/sayi[1];
}
else
{
printf ("wtf!! you can't divide by 0!");
}
break;
default:
printf("did you mean \"i don't know maths\"");
}
return result;
}
token = strtok(input, functions);
您需要检查 strtok
的 return 值,否则您可能会将空指针传递给 atoi
。稍后在您的代码中使用 token = strtok(NULL, functions);
调用atoi(token)
前需要检查token
是否为NULL
。
更改行:
token = strtok(input, functions);
sayi[0]=atoi(token);
while( token != NULL )
{
token = strtok(NULL, functions);
sayi[i]=atoi(token); // token will eventually be NULL
// and you run into a problem here.
i++;
}
至:
token = strtok(input, functions);
i = 0;
while( token != NULL )
{
sayi[i]=atoi(token);
token = strtok(NULL, functions);
i++;
}