kingze1992 发表于 2014-8-20 17:05:38

转义字符 \t的问题

本帖最后由 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;

    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)
{
    int i;

    for (i = 0; str != '\0'; i++)
    {
      if ((str >= 'a' && str <= 'z') || (str >= 'A' && str <= 'Z'))
            letter++;
      else if (str >= '0' && str <= '9')
            number++;
      else if (str == ' ')
            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
请按任意键继续. . .



calton007 发表于 2014-8-21 22:18:02

把str改成str

kingze1992 发表于 2014-8-24 13:07:54

calton007 发表于 2014-8-21 22:18
把str改成str

我复制错了。我的代码里都是 str
但问题不是这个,是输出结果   ,为什么输出结果中   space和 others 不是空8格 ,   但是把他俩的位置换一下就正确了。

musilintan 发表于 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就是为了对齐。。。。

kingze1992 发表于 2014-8-24 21:51:48

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


非常感谢!      我一直以为 \t就是空8列。。。   结果刚查了下书,是跳到下一个制表位置(一个tab位置为8列)。   我把space后面加一个空格就ok了,    space :%d
页: [1]
查看完整版本: 转义字符 \t的问题