| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1048 人关注过本帖
标题:新手求助 特别简单的程序 百思不得其解
只看楼主 加入收藏
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
收藏
得分:2 
哦,这个问题经典
2012-03-19 00:50
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
收藏
得分:0 
回复 9楼 星辰雁
不明白,同时退格,位置应该不变吧



[ 本帖最后由 jianyuling00 于 2012-3-19 00:59 编辑 ]
2012-03-19 00:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
回复 楼主 zym1992
\t后面的空格在作怪,不要那个就可以了。要么用两个空格。经测试,就是\t后跟1个空格有问题,多1个都没事。应该是printf()函数的问题,待会试试别的输出函数。

[ 本帖最后由 TonyDeng 于 2012-3-19 01:38 编辑 ]

授人以渔,不授人以鱼。
2012-03-19 01:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己用下面的代码测试一下吧:

程序代码:
#include <stdio.h>
#include <conio.h>

void main(void)
{ 
    printf_s("01234567890123456789\n");
    //printf_s("\t");
    //_getch();
    printf_s(" ");
    _getch();
    printf_s("\b");
    _getch();
    printf_s("1");
    _getch();
    printf_s("\b");
    _getch();
    printf_s("5");
    _getch();
}

授人以渔,不授人以鱼。
2012-03-19 01:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
测试代码:

程序代码:
#include <stdio.h>
#include <conio.h>

void main(void)
{ 
    const char str[] = "\t \b1\b5";
    const char* p = str;

    puts("12345678901234567890");
    printf_s("%s\n", str);
    //puts(str);
    while (*p)
    {
        //printf_s("%c", *p);
        putchar(*p);
        //_putch(*p);
        ++p;
    }
    _getch();
}

授人以渔,不授人以鱼。
2012-03-19 01:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
测试结果表明:拆解了字符串逐个字符输出是没有问题的,但连在一起以字符串整体输出(无论是用printf()还是puts()),都有问题,对后者,\t后接2个空格却没有问题。现在故障锁定在对"\t "的处理上,极可能是库函数内部的问题。

授人以渔,不授人以鱼。
2012-03-19 02:00
星辰雁
Rank: 4
等 级:业余侠客
威 望:1
帖 子:93
专家分:275
注 册:2011-9-10
收藏
得分:0 
不好意思,我说错了,这个问题挺复杂的

不要认为CPU运算速度快就 把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们程序员服务的!
2012-03-19 17:54
星辰雁
Rank: 4
等 级:业余侠客
威 望:1
帖 子:93
专家分:275
注 册:2011-9-10
收藏
得分:0 
经过我多次测试,在其他情况下基本能够解释,但\t加一个字符的情况就是个特例。
当\t前面有两个空格或两个字符时,它又能够正常解释。
主要问题还是“\t+一个字符”的特例。

不要认为CPU运算速度快就 把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们程序员服务的!
2012-03-19 18:09
Litsam
Rank: 1
等 级:新手上路
帖 子:9
专家分:8
注 册:2012-3-19
收藏
得分:2 
回复 9楼 星辰雁
如果是printf("\t \b1\b5\b3\n");
在Visual C++中输出的结果是:       31   
这又是怎么回事呢   

谢谢
2012-03-19 19:12
那个人啊
Rank: 2
等 级:论坛游民
帖 子:56
专家分:36
注 册:2011-3-9
收藏
得分:2 
真是怪事儿,全部拆开了输出就只有一个“5”了。
2012-03-19 22:03
快速回复:新手求助 特别简单的程序 百思不得其解
数据加载中...
 
   



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

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