C 使用命令行参数时出现分段错误

C 使用命令行参数时出现分段错误,c,command-line-arguments,random-seed,C,Command Line Arguments,Random Seed,我是编程新手。下面是我编写的一个程序,用于计算随机6边掷骰子的概率分布。它工作得很好,但是如果我使用命令行参数来表示抛出次数,它就会开始抛出分段错误。有人能帮我理解我做错了什么吗 // distribution of rand numbers #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <time.h> const unsigned short NUM_F

我是编程新手。下面是我编写的一个程序,用于计算随机6边掷骰子的概率分布。它工作得很好,但是如果我使用命令行参数来表示抛出次数,它就会开始抛出分段错误。有人能帮我理解我做错了什么吗

// distribution of rand numbers

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>

const unsigned short NUM_FACES = 6;

int main(int argc, char * argv[])
{
    if(argc != 2 || isdigit(argv[1]))
    {
        printf("Invalid arguments!!\n");
        printf("Usage: %s numThrows\n", argv[0]);                      //correct usage of arguments
        exit(EXIT_FAILURE);
    }

    system("clear");

    srand(time(0));                                                    //updating seed
    long upperLim = atol(argv[1]);
    long dist[7] = {0};
    double probab = 0.0;
    unsigned int i;
    for(i = 0; i < upperLim; i++)
        ++dist[rand()%6 + 1];                                         //generating random numbers (1-6)

    for(i = 0; i < NUM_FACES; i++)
    {
        probab = 100.0*dist[i]/upperLim;                              //calculating probability of each throws
        printf("DICE THROW %d ->     Number of throws: %ld     Distribution: %.2lf%c\n", i+1, dist[i], probab, '%');
    }

    getchar();
    return 0;
}
//随机数的分布
#包括
#包括
#包括
#包括
const unsigned short NUM_FACES=6;
int main(int argc,char*argv[])
{
if(argc!=2 | | isdigit(argv[1]))
{
printf(“无效参数!!\n”);
printf(“用法:%s numThrows\n”,argv[0]);//参数的正确用法
退出(退出失败);
}
系统(“清除”);
srand(时间(0));//更新种子
长upperLim=atol(argv[1]);
长距离[7]={0};
双概率=0.0;
无符号整数i;
对于(i=0;i掷骰次数:%ld分布:%.2lf%c\n”,i+1,dist[i],probab,”);
}
getchar();
返回0;
}
isdigit
需要的是
int
,而不是
char*

如果要检查所有字符是否都是数字,可以使用以下内容:

bool strIsDigit(const char *str)
{
    while (*str)
    {
        if (!isdigit((unsigned char)*str++))
        {
             return false;
        }
    }
    return true;
}
不客气;),您应该始终在编译时在
bool strIsDigit(const char *str)
{
    while (*str)
    {
        if (!isdigit((unsigned char)*str++))
        {
             return false;
        }
    }
    return true;
}