鱼C论坛

 找回密码
 立即注册
查看: 2437|回复: 4

转义字符 \t的问题

[复制链接]
发表于 2014-8-20 17:05:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 kingze1992 于 2014-8-24 13:09 编辑

求助: 以下代码
#include <stdio.h>

int letter = 0, number = 0, space = 0, others = 0;

int main()
{
    void count(char str[]);
    char str[80];

    printf("Input string:\n");
    gets(str);
    printf("The string is:\n");
    puts(str);
    count(str);
    printf("\nletter:%d\tnumber:%d\tothers:%d\tspace:%d\n", letter, number, others, space);

    return 0;
}

void count(char str[80])
{
    int i;

    for (i = 0; str[i] != '\0'; i++)
    {
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
            letter++;
        else if (str[i] >= '0' && str[i] <= '9')
            number++;
        else if (str[i] == ' ')
            space++;
        else
            others++;
    }
}


为什么输出是这样:
Input string:
aaa 12bbb3 !@#$%
The string is:
aaa 12bbb3 !@#$%

letter:6        number:3        space:2 others:5
请按任意键继续. . .

但是把 printf语句中的 space 和 others 换个位置,
printf("\nletter:%d\tnumber:%d\tothers:%d\tspace:%d\n", letter, number, others, space);
就正常了:
Input string:
aaa 12bbb3 !@#$%
The string is:
aaa 12bbb3 !@#$%

letter:6        number:3        others:5        space:2
请按任意键继续. . .



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-21 22:18:02 | 显示全部楼层
把str改成str[i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-24 13:07:54 | 显示全部楼层

我复制错了。  我的代码里都是 str[i]
但问题  不是这个,是输出结果   ,为什么输出结果中   space  和 others 不是空8格 ,   但是把他俩的位置换一下  就正确了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-24 21:23:30 | 显示全部楼层
kingze1992 发表于 2014-8-24 13:07
我复制错了。  我的代码里都是 str
但问题  不是这个,是输出结果   ,为什么输出结果中   space  和 ot ...

\t  是制表符。
他会把不足4个字符的输出自动补足4个字符。
制表符的作用就是显示整齐。
11110000111100001111
11110000111100001111
像这样。1为输出内容,0为制表符补充的空位。
你可以仔细观察一下你所输出的字符:
1111111100001111111100001111111011111111
分别是:8个1---4个0---8个1---4个0---7个1---1个0---8个1
发现没有?
前面的都是正常8个字符,当你加入\t后,他会自动在这8个字符后面再加4个空字符。
而第三个字符串,也就是你的space:2。这个字符恰好有7个,当你加入\t后。他会检测前面的字符是否够4个,而7刚好为4+3.也就是最后3个字符不足4.
这样,\t会自动把后面3个字符使用空字符补成4个字符。而此时的/t已经被消耗。如果希望后面再加4个空字符,就需要再加一个\t。
printf("\nletter:%d\tnumber:%d\tspace:%d\t\tothers:%d\n", letter, number, space, others, );
大体就这样了。。。也不知道你看明白没。。。。你自己再好好想想,应该不难。
\t就是为了对齐。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-24 21:51:48 | 显示全部楼层
musilintan 发表于 2014-8-24 21:23
\t  是制表符。
他会把不足4个字符的输出自动补足4个字符。
制表符的作用就是显示整齐。

非常感谢!        我一直以为 \t就是空8列。。。   结果刚查了下书,  是跳到下一个制表位置(一个tab位置为8列)。     我把  space后面加一个空格就ok了,    space :%d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 21:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表