遇到这个报错该怎么解决啊[Error] 'rand' cannot be used as a function

    void CreateASCII()    //随机生成ascii码(小写字母)
    {
        int i;
        int rand;
        for (i = 0; i < 6000; i++)
            ascii[i] = (rand() * rand() % (98 - 97 + 1)) + 97;
        for (i = 6000; i < 8000; i++)
            ascii[i] = (rand() * rand() % (105 - 97 + 1)) + 97;
        for (i = 8000; i < 9000; i++)
            ascii[i] = (rand() * rand() % (120 - 100 + 1)) + 100;
        for (i = 9000; i < 9900; i++)
            ascii[i] = (rand() * rand() % (120 - 97 + 1)) + 97;
        for (i = 9900; i < 10000; i++)
            ascii[i] = (rand() * rand() % (122 - 120 + 1)) + 120;


        for (i = 0; i < 10000; i++)
            for (int e = 0; e < 26; e++)
                if (ascii[i] == 97 + e) num[e]++;//计算各字符频数
        for (int c=0; c < 26; c++)
            cout << (char)(97 + c) << "的频数为:" << num[c] << endl;//打印各频数
    }

遇到这个报错该怎么解决啊[Error] 'rand' cannot be used as a function

加入头文件 stdlib.h,其他地方也稍微修改下,四个产生ascii码的for循环未修改。

修改如下:

参考链接:


https://blog.csdn.net/lvyibin890/article/details/80141412

#include <iostream>
#include <stdlib.h>  // rand()函数头文件
 using namespace std; 
 
 char ascii[20000];
 int num[26];
 
    void CreateASCII()    //随机生成ascii码(小写字母)
    {
        int i;
        //int rand;  // 这个不要,因为会和下面的rand()函数产生冲突
        for (i = 0; i < 6000; i++)           
            ascii[i] = (rand() * rand() % (98 - 97 + 1)) + 97;
        for (i = 6000; i < 8000; i++)
            ascii[i] = (rand() * rand() % (105 - 97 + 1)) + 97;
        for (i = 8000; i < 9000; i++)
            ascii[i] = (rand() * rand() % (120 - 100 + 1)) + 100;
        for (i = 9000; i < 9900; i++)
            ascii[i] = (rand() * rand() % (120 - 97 + 1)) + 97;
        for (i = 9900; i < 10000; i++)
            ascii[i] = (rand() * rand() % (122 - 120 + 1)) + 120;
 
 
        for (i = 0; i < 10000; i++)
            for (int e = 0; e < 26; e++)
                if (ascii[i] == 97 + e) num[e]++;//计算各字符频数
        for (int c=0; c < 26; c++)
            cout << (char)(97 + c) << "的频数为:" << num[c] << endl;//打印各频数
    }


int main(void){
    CreateASCII();
    return 0;
}

img

int rand;
你这里不是把它定义成int了吗,删掉
此外,使用rand之前,需要先使用随机种子,否则每次运行出来的数都是同一组数

  • 看下这篇博客,也许你就懂了,链接:随机数rand()
  • 同时,你还可以查看手册:产生一个伪随机数-rand 中的内容
  • 除此之外, 这篇博客: 解析游戏中的简单概率算法中的 rand()函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • rand(产生随机数)
    表头文件: #include<stdlib.h>
    定义函数 :int rand(void)

    函数说明 :
    因为rand() 的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand() 会返回一随机数值,范围在 0 至 RAND_MAX 间
    在调用此函数产生随机数前,必须先利用 srand()设置好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为 1。
    rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它,初始化的函数就是 srand()。
    使用srand函数要包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列,同时这要求程序的两次运行的间隔超过1秒。

    返回值:
    返回 0 至 RAND_MAX 之间的随机整数值,RAND_MAX 的范围最少是在 32767 之间(int),即双字节(16位数)。
    若用unsigned int 双字节是 65535,四字节是 4294967295 的整数范围。
    0~RAND_MAX 每个数字被选中的机率是相同的。