生成随机.txt文件,10行,10列。充满随机:"*"、"#"、"@"。然后将随机字符替换为'P'



我是C++的初学者。主要从YouTube课程中学习。当我遇到阻止我完成的问题时,我正在做这项任务。我想在代码部分寻求帮助。

#include#include<时间>#include<马斯>#include#include<串>#include<流>#include<流>#include<流>使用命名空间标准; int main(( { 斯兰德(时间(0((; 流文件; cout<<"任务"<<""; file.open("TASK.txt", fstream::in | fstream::out | fstream::trunc (; if(file.good(( == true( { cout<<"TRUE"<<""; char ch[] = {'#','@','*'};三个字符的数组。 for(int i=0; i<10; i++( { for(int j=0; j<10; j++( { file<<ch[rand((%3];随机字符 } 文件<<endl; } file.seekp(rand((%120(; file.put('P'(; file.close((; } else cout<<"FALSE"<<""; 返回 0; }

我做了什么:

  1. 打开一个文件并从任务描述中创建了 3 个字符的数组。

  2. 创建了 2 个用于写入和格式化文件数据的循环。

  3. 通过使用 file.seekp(0,file.end( 发现文件中的字符数等于 120。

  4. 使用字符数的知识 file.seekp(rand((%120( 将输出序列中的位置设置为随机位置。

  5. 使用 file.put('P'( 将字符放置在该位置。

  6. 关闭的文件。

我不知道的:

  1. 如何摆脱(或做其他事情(这 20+ 个字符以仅更改这些字符:"#"、"@"、"*"。

  2. 要可视化问题,请执行以下操作:

输出:当它按预期工作时。

@#*#*##@*@
@@*##*@@@*
@@**@#*@##
#@@*@##P**
****##@@*#
#@#@*@####
**#@#@#@*@
@*#*@###*#
*@###*#@*#
@@*#@@#@@@

当它没有按预期工作时:

@@@#@@@*#*
##*##*@@#*
@@##@#*#*@P
*@@@**###*
##*@*#*@**
**##@#*@**
@###@*#***
@#@**##@@*
#@*###@@@*
@#@#*#*#@#

如果我不够清楚,我可以尝试解释更多。

解决方案(感谢 Rustyx(

int r_number = 0;
for(int i=0; i<=120; i++)
{
int r_number2 = rand()%120;
if((r_number2%12)>=10)
{
r_number2 = rand()%120;
}
else r_number=r_number2;
}

谢谢。

问题是每行末尾都有CR,LF字符(rn(,不应该被触摸。但是您生成一个介于 0 和 119 之间的随机数,这可能会击中这些并损坏文件。

我可以想到2种可能的解决方案:

  • 循环并得到一个新的随机数,如果除以 12 的余数是>= 10(你知道为什么吗?
  • 获取一个介于 0 和 99 之间的随机数,并将其填充为 CR,LF:x += (x/10)*2

我不知道VC++如何在文本模式下处理文件位置,它可能会将CR,LF视为单个位置。在这种情况下,将填充逻辑从 12 调整为 11。

相关内容

最新更新