转义字符 \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
请按任意键继续. . .
把str改成str calton007 发表于 2014-8-21 22:18
把str改成str
我复制错了。我的代码里都是 str
但问题不是这个,是输出结果 ,为什么输出结果中 space和 others 不是空8格 , 但是把他俩的位置换一下就正确了。 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就是为了对齐。。。。 musilintan 发表于 2014-8-24 21:23
\t是制表符。
他会把不足4个字符的输出自动补足4个字符。
制表符的作用就是显示整齐。
非常感谢! 我一直以为 \t就是空8列。。。 结果刚查了下书,是跳到下一个制表位置(一个tab位置为8列)。 我把space后面加一个空格就ok了, space :%d
页:
[1]