标题:清屏函数用法求解
只看楼主
qq1625127317
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:185
专家分:450
注 册:2015-9-3
结帖率:83.33%
已结贴  问题点数:10 回复次数:14 
清屏函数用法求解
下面这段程序,要求是每次按下enter 键后就会在二维数组中随机出现一个笑脸,但是我出现的效果是新的笑脸出现了,但原来那个没有消失,求解!

 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
int main()
{
    char a[10][10];
    int i,j;
    char d = '$';
    srand(time(NULL));
    for(i = 0;i < 10;i++)
    for(j = 0;j < 10;j++)
       a[i][j] = ' ';
    while(d != '#')
    {
            system("cls");//就是这一步!!!
            i = rand()%10;
        j = rand()%10;
        a[i][j] = 1;
        for(i = 0;i < 10;i++ )
         {
             for(j = 0;j < 10;j++)
            printf("%-2c",a[i][j]);
             printf("\n");
              }
              d = getch();
      }
}
搜索更多相关主题的帖子: include system 
2015-09-03 19:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
清的是屏幕,输出的是数组中的数据。

授人以渔,不授人以鱼。
2015-09-03 20:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
清屏如果无效,输出是一直向上滚动的,不会像你现在看到的那样,就已经是生效了。你没清除数组中原先的笑脸罢了,当然越来越多。

授人以渔,不授人以鱼。
2015-09-03 20:50
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
既然rand出来坐标值,可不需要数组也可简单完成这个功能的。

能编个毛线衣吗?
2015-09-03 20:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
他用tc,包含了conio.h头不也懂直接输出到屏幕,非要用printf(),那就得循环,还要清空数组。本来不清数组也可以,记忆上次的位置即可。

授人以渔,不授人以鱼。
2015-09-03 20:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
tc本身有内置清屏函数,也不会用,要system()。

授人以渔,不授人以鱼。
2015-09-03 21:02
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:6 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
int main()
{
    int i,j;
    char d='$';
    srand(time(NULL));
    while(d != '#')
    {
        system("cls");//就是这一步!!!
        i = rand()%10;
        j = rand()%10;
        for(;i>0;i--)printf("\n");
        for(;j>0;j--)printf(" ");
        printf("%c",1);  //不用数组显示,如要按你需求用数组,则需要把数组清为空格的那两个for循环放到while循环内。
        d = getch();
    }
}

能编个毛线衣吗?
2015-09-03 21:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 7楼 wmf2014
直接用下标冲刷就可以了

授人以渔,不授人以鱼。
2015-09-03 21:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:4 
花2个变量记住上一次的输出下标,则省去循环数组的开销,用循环反覆调用printf()是很慢的,用putchar()快一点,用putch()更快。使用gotoxy(),根本不用清屏,或者用clrscr()清屏,也比system("cls")快。

授人以渔,不授人以鱼。
2015-09-03 21:20
qq1625127317
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:185
专家分:450
注 册:2015-9-3
得分:0 
回复 9楼 TonyDeng
恩,我试试哈

静坐常思己过,闲谈莫论人非
2015-09-04 08:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-456988-1-1.html




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

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