| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:来看看这个为什么会显示乱码呢?
只看楼主 加入收藏
qq576688920
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-7-25
收藏
得分:0 
程序代码:
#include<iostream>//输入输出流
const int Len = 66;//声明一个常数Len
const int Divs = 6;//声明一个常数Divs。          (用来规定分几次。)
void subdivide(char ar[], int low, int high, int level);//声明一个子函数subdivide
//这个程序就是一个普通的实验程序,纯粹是找不到事做了。其目地是为了可以将一个一个长度一直分它的1/2,使它变成很多短的单位长度的组合。

int main()
{
    using namespace std;//声明函数空间
    char ruler[Len];//定义一个ruler数组
    int i;//声明一个变量i
    for ( i = 1; i < Len-2; i++)//用一个for循环给入ruler数组除首尾两元素以外附上一个空格字符,首尾用来存放‘|’
        ruler[i] = ' ';//程序乱码大概出在这,但是我不知道怎么改
    ruler[Len - 1] = '\n';//在数组的最后一个元素加上一个换行符。
    int max = Len - 2;
    int min = 0;//和上面函数共同规定了一个长度,最大最小
    ruler[min] = ruler[max] = '|';//把‘|’付给最大最小两个元素
    cout << ruler << endl;//输出流,输出这个数组其应该显示“|                |”这样的一个图形
    for ( i = 1; i <Divs; i++)//本程序的一个重点
    {
        subdivide(ruler, min, max, i);//调用子函数。(根据数据结构,你该去看一下子函数了。)
        cout << ruler << endl;//显示处理完的数组数组。
        for (int j = 1; j <Len - 2; j++)//再一个for循环清零数组。其纯在的意义就是消灭那些乱码,然而并内有什么卵用。
        {
            ruler[j] = ' ';//或许是这出错了。
        }
    }
    
    cin.get();//接受一个任意数结束程序。
    return 0;
}
void subdivide(char ar[], int low, int high, int level)
{
    if (level == 0)//当i值等于一时,下面函数调用自己时每次-1,当等于0时结束递归循环。
        return;
    int mid = (high + low) / 2;//取中点。
    ar[mid] = '|';//把中点这个元素付成‘|’,从而用‘|’把这个单位长度分成两个
    subdivide(ar, low, mid, level-1);//把分出来的左边执行一样的函数。由于每次调用都会再次调用到这个部分,所以达到了递归的目的。
    subdivide(ar, mid, high, level - 1);//把右边分出来。
}
2015-08-18 11:00
qq576688920
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-7-25
收藏
得分:0 
回复 10楼 wp231957
已经注释了,在你楼下
2015-08-18 11:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:4 
以下是引用wp231957在2015-8-17 21:47:17的发言:

不知道你的主函数是干什么的  也不知道你的子函数是干什么的
、难道你这都舍不得说出来嘛   叫人如何帮你
他其实想输出如下图形
|                                                               |
|                               |                               |
|               |               |               |               |
|       |       |       |       |       |       |       |       |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
6行,每行65个字符(包括空格和竖线)
2015-08-18 12:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
回复 11楼 qq576688920
你这说了等于没说

别人问你想实现什么功能,你却回答“某某肌肉收缩多少,手臂抬高几度,……”,别人能听懂吗?直接回答“搬砖”别人就明白了嘛。
2015-08-18 12:16
qq576688920
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-7-25
收藏
得分:0 
回复 13楼 rjsp
就是这样,但是实现有乱码,怎么也清不掉
2015-08-19 00:15
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
因为你没有字符串结束符,所以产生乱码,代码修改后如下:
程序代码:
#include<iostream>
const int Len = 66;
const int Divs = 6;
void subdivide(char ar[], int low, int high, int level);


int main()
{
    using namespace std;
    char ruler[Len];
    int i;
    for ( i = 1; i < Len-2; i++)
        ruler[i] = ' ';
    ruler[Len - 1] = '\0';  //把回车符改成字符串结束符就可以了,因为你每次显示都有endl,所以不需要再加\n
    int max = Len - 2;
    int min = 0;
    ruler[min] = ruler[max] = '|';
    cout << ruler << endl;
    for ( i = 1; i <Divs; i++)
    {
        subdivide(ruler, min, max, i);
        cout << ruler << endl;
        for (int j = 1; j <Len - 2; j++)
        {
            ruler[j] = ' ';
        }
    }
   
    cin.get();
    return 0;
}
void subdivide(char ar[], int low, int high, int level)
{
    if (level == 0)
        return;
    int mid = (high + low) / 2;
    ar[mid] = '|';
    subdivide(ar, low, mid, level-1);
    subdivide(ar, mid, high, level - 1);
}


[ 本帖最后由 wmf2014 于 2015-8-19 06:54 编辑 ]

能编个毛线衣吗?
2015-08-19 06:41
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:4 
楼主抄书上的代码都抄错了,不认真看书的结果就是这个样子吧!
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

2015-08-21 09:41
农民工
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:109
专家分:639
注 册:2015-8-22
收藏
得分:4 
ruler[Len - 1] = '\n';  ->   ruler[Len - 2] = '\n';
2015-08-22 15:01
快速回复:来看看这个为什么会显示乱码呢?
数据加载中...
 
   



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

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