| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2434 人关注过本帖
标题:可以运行,但出不来结果,想要做数字雨
只看楼主 加入收藏
aluoshinn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-3-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:13 
可以运行,但出不来结果,想要做数字雨
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>

#define M 40//行
#define N 100//列
#define TIME 40//刷新的速度,这里是停顿的时间
#define midu 8//密度

//void Pos(int x, int y);//设置光标位置,决定要在什么位置输出
char output[M*N+M+1];//行*列+M个换行+1个结束符
void Create(char rain[M][N]);
void Updata(char rain[M][N]);
void Print(char rain[M][N]);

int main(void)
{
    char rain[M][N];
    //int changdu;
    srand((unsigned)time(NULL));
    system("color 0A");
    Create(rain);
    while(1)
    {
        Sleep(TIME);
        Updata(rain);
    }
    return 0;
}

void Create(char rain[M][N])
{
    int changdu;
    int i,j,t;
    changdu=rand()%(M/4);
    for(i = 0;i < M;++i)
    {
        for(j = 0;j < N;++j)
        {
            if(rand()%10 < midu)
                rain[i][j] = ' ';
            else
                rain[i][j] = rand()%10 + '0';
                for(t=1;t<=changdu;t++)
                {
                    rain[i-t][j]= rand()%10 + '0';
                }
        }
    }
}



void Updata(char rain[M][N])
{
    int i,j,t;
    int changdu;
    for(i = M-2;i >= 0;--i)
    {
        for(j = 0;j < N;++j)
        {
            rain[i+1][j] = rain[i][j];
        }
    }
    for(i = 0;i < N;++i)
    {
        if(rand()%10 < midu)
            rain[0][i] = ' ';
        else
            rain[0][i] = rand()%10 + '0';

    }
    Pos(0,0);
    Print(rain);
}

void Print(char rain[M][N])
{
    int i,j;
    int t = 0;
    for(i = 0;i < M;++i)
    {
        for(j = 0;j < N;++j)
        {
            putchar(rain[i][j]);
        }
        putchar('\n');
    }
    putchar('\0');
}

void Pos(int x,int y)
{
    HANDLE hOutput;
    pos.X = x;
    pos.Y = y;
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOutput,pos);
}
搜索更多相关主题的帖子: void int rand for char 
2020-03-30 19:56
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:10 
错误太多
pos 没定义
rain[i-t][j]= rand()%10 + '0'; 越界
Updata只创建了第一个字符 没有处理后续字符

https://zh.
2020-03-30 20:12
aluoshinn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-3-30
收藏
得分:0 
回复 2楼 lin5161678大佬,那这样呢?新人学校刚学没几周,但有这个任务
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>

#define M 40//行
#define N 100//列
#define TIME 40//刷新的速度,这里是停顿的时间
#define midu 8//密度

void Pos(int x, int y);//设置光标位置,决定要在什么位置输出
char output[M*N+M+1];//行*列+M个换行+1个结束符
void Create(char rain[M][N]);
void Updata(char rain[M][N]);
void Print(char rain[M][N]);

int main(void)
{
    char rain[M][N];
    //int changdu;
    srand((unsigned)time(NULL));//初始化随机的一个种子
    system("color 0A");//设置背景颜色
    //while(1){
    //{
        //changdu=rand()%(M/4);
        Create(rain);//用于最开始的创建
        while(1)
        {
            Sleep(TIME);//每次要刷新的速度,之前定义了,
            //            因为每次都要生成新的数组,中间存在间隔
            Updata(rain);//用于每一行向下一行移动
        }
    //}
    return 0;
}

void Create(char rain[M][N])
{
    int changdu;
    int i,j,t;
    for(i = 0;i < M;++i)
    {
        for(j = 0;j < N;++j)
        {
            if(rand()%10 < midu)
                rain[i][j] = ' ';
            else
                rain[i][j] = rand()%10 + '0';//生成第一滴雨
                changdu=int(rand()%(M/4));
                if(i>changdu)
                {
                    for(t=1;t<=changdu;t++)
                    {
                        rain[i-t][j]= rand()%10 + '0';
                    }
                }
                else
                {
                    for(t=1;t<=i;t++)
                    {
                        rain[i-t][j]= rand()%10 + '0';
                    }
                }
        }
    }
}



void Updata(char rain[M][N])
{
    int i,j,t;
    int changdu;
    for(i = M-2;i >= 0;--i)
    {
        for(j = 0;j < N;++j)
        {
            rain[i+1][j] = rain[i][j];//把上面的一行写到下一行
        }
    }
    for(j = 0;j < N;++j)
        {
            if(rand()%10 < midu)
                rain[i][j] = ' ';
            else
                rain[i][j] = rand()%10 + '0';//生成第一滴雨
                changdu=int(rand()%(M/4));
                if(i>changdu)
                {
                    for(t=1;t<=changdu;t++)
                    {
                        rain[i-t][j]= rand()%10 + '0';
                    }
                }
                else
                {
                    for(t=1;t<=i;t++)
                    {
                        rain[i-t][j]= rand()%10 + '0';
                    }
                }
        }
    Pos(0,0);
    Print(rain);
}

void Print(char rain[M][N])
{
    int i,j;
    int t = 0;
    for(i = 0;i < M;++i)
    {
        for(j = 0;j < N;++j)
        {
            output[t++] = rain[i][j];
            //putchar(info[i][j]);
        }
        output[t++] = '\n';
        //putchar('\n');
    }
    output[t] = '\0';
    printf("%s",output);
}

void Pos(int x,int y)
{
    COORD pos;
    HANDLE hOutput;
    pos.X = x;
    pos.Y = y;
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOutput,pos);
}
2020-03-30 20:46
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
程序代码:
                if(i>changdu)
                {
                    for(t=1;t<=changdu;t++)
                    {
                        rain[i-t][j]= rand()%10 + '0';
                    }
                }
                else
                {
                    for(t=1;t<=i;t++)
                    {
                        rain[i-t][j]= rand()%10 + '0';
                    }
                }

i取值最小是 0
t取值最小是 1
rain[0-1].... GG

https://zh.
2020-03-30 20:50
aluoshinn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-3-30
收藏
得分:0 
回复 4楼 lin5161678
可我好像用if语句控制t的范围了,要比i小了好像
2020-03-30 20:56
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 5楼 aluoshinn
你说得对
我看错 我再看看

https://zh.
2020-03-30 21:02
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:10 
那个有个额外的问题,GUI下的控制台窗口性能有限,恐怕会卡或者闪。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-30 21:27
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
你想控制每个雨滴长度一致?

https://zh.
2020-03-30 21:37
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
你的密度 没计算上一帧的影响 最后每一列都会有数字
你的长度 操作无效
更新函数中第一个循环处理的下移操作
第二个循环 i 必然是 0
所以必然执行else
但是 i 是 0
所以 循环必然不运行
等于白写

最后就是全屏数字

https://zh.
2020-03-30 21:43
aluoshinn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-3-30
收藏
得分:0 
回复 9楼 lin5161678
额,彻底懵圈了
2020-03-30 21:45
快速回复:可以运行,但出不来结果,想要做数字雨
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016751 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved