首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

随机抽取名单中的名字

01

项目介绍

一个随机抽取名单文件中的名字的c++小程序。

02

代码

刚开始 的想法是用一个二维字符数组来储存名单中 的名字。

char name[NAME_NUM][NAME_LEN];

NAME_NUM:名字最大数目,我就不弄动态的了,固定为50;

NAME_LEN:名字长度,按五个汉字算,为10;

声明随机变量和计数变量:

int rndIndex,i=0;

接着是用文件流打开并读取:

ifstream fin;

fin.open("nameList.txt");

if(fin.fail())

return 0;

while(!fin.eof())

{

fin.getline(name[i],NAME_LEN);

i++;

}

抽取名字:

do

{

rndIndex=rand()%i;

cout

cin>>command;

}while(command != '0');

最后关闭文件:

fin.close();

名单文件里面是这样的:

编译通过,但是段错误了,去查了一下,发现是因为非法访问内存了。错误语句是 fin.getline(name[i],NAME_LEN);

我也不明白咋回事,把它改成fin>>name[i];就ok了。

是可以运行,不过又出现了一个问题:

乱码了。说明输出了name数组未赋值的行。那也许是rndIndex的问题?

于是把这个语句改了一下:

cout

一个个地尝试,齐木楠雄和照桥心美都没问题,尝试到八一老爷的时候……

歪,妖妖灵吗?对,还是那个人,不过换了个地方

好吧不开玩笑了,其实应该是龙王的名字太长而越界了,来试试把NAME_LEN改成20;

就可以 正常运行了:

接着改成11,也可以正常运行。突然想起来,字符串末尾的'\0'也是需要一个位置的,这就难怪了。

03

收获

字符串末尾需要一个'\0'的位置,记得留出来;

二维数组声明时用花括号赋值,没有赋值到的元素变为空字符串;

段错误主要是因为访问非法内存;

测试时候不要让八一老爷来

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224G101NX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券