所以我编译程序并像./beetle int int一样运行它,基本上是可执行文件和2个int符号,我想测试是否在可执行文件之后有超过2个参数,如果有一个参数是不是一个int(如300b),如果有一个参数是一个浮点数,而不是一个int,如果参数溢出
我坚持如何对非整数和溢出进行测试,有人能指出我正确的方向吗?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265
void beetleSimulation(int, int);
int main ( int argc, char *argv[] )
{
char * pEnd;
if ( argc != 3 ) // argc should be 2 for correct execution
{
// If the number of arguments is not 2
fprintf(stderr, "Error: Program has %d arguments ", argc);
return 0;
}
else
{
//run the beetle simulation
beetleSimulation(strtol(argv[1], &pEnd, 10), strtol(argv[2], &pEnd, 10 ));
if (!*pEnd)
printf("Success!");
else
printf("Failed!");
return 0;
}
}
void beetleSimulation(int size, int iterations){
int i;
double xCount;
double yCount;
int timeCount;
int overallCount = 0;
int degree;
double radian;
int border;
for(i=0; i < iterations; i++){
xCount = 0;
yCount = 0;
timeCount = 0;
border -= size;
while(xCount < size && xCount > border && yCount <size && yCount >border ){
timeCount += 1;
degree = rand() % 360;
radian = degree / (180 * PI);
xCount += sin(radian);
yCount += cos(radian);
printf("Radian is %f\n", radian);
printf("X and Y are %f and %f\n", xCount, yCount);
}
//when beetle has died, add time it took to overall count, then go through for loop again
overallCount += timeCount;
printf("Time for this run is %d, overall its %d\n",timeCount, overallCount);
}
//calculate average time
double averageTime = overallCount/iterations;
printf("Average Time is %f",averageTime);
}
答案 0 :(得分:0)
转换为int
转换函数的字符串。
bool str2int(const char *s, int *dest) {
char *endptr;
errno = 0;
long lnum = strtol(s, &endptr, 10);
if (s == endptr) return 1; // fail - no conversion
if (*endptr) return 1; // fail - extra garbage
if (errno || lnum < INT_MIN || lnum > INT_MAX) return 1; // fail - overflow
*dest = (int) lnum;
return 0; // success
}
答案 1 :(得分:0)
建议获取argv [x]
的strlen()值然后执行strtol()调用
然后将argv [x] + strlen()值与strtol()的第二个参数中设置的值进行比较
如果匹配,则参数是一个好的int,
另一方面,这个论点(可能)不是一个好的。
建议在调用beetleSimulation()之前进行所有这些比较
因为对strtol()的两次调用都使用相同的变量作为结束地址,所以第二次调用strtol()会掩盖第一次调用中设置的值。