【发布时间】:2013-12-06 14:33:48
【问题描述】:
代码1:
#include<stdio.h>
int main()
{
unsigned short i, j, k;
for (i = 0; i < 2; i++)
{
k = i * 4 + 4;
for (j = k - 4; j < k; j++)
printf("%hu ", j);
putchar('\n');
}
return 0;
}
代码 1 的输出:
0 1 2 3
4 5 6 7
Code1备注:
- 3 和 7 之后的空格
- 7 之后的换行符 (Stackoverflow 已将其删除)
代码2:
#include<stdio.h>
int main()
{
unsigned short i, j, k;
for (i = 0; i < 2; i++)
{
k = i * 4 + 4;
for (j = k - 4; j < k; j++)
{
printf("%hu", j);
if (j + 1 != k) putchar(' ');
}
if (i + 1 != 2) putchar('\n');
}
return 0;
}
代码2的输出:
0 1 2 3
4 5 6 7
Code2备注:
- 3 和 7 后面没有空格
- 7 之后没有换行符
Code2补充说明:
Code2 的问题是算法总是比较 if 块中的两个值,因此 Code2 效率不高。我想使用 Code1 并更改这些:
代码3
#include<stdio.h>
int main()
{
unsigned short i, j, k;
for (i = 0; i < 2; i++)
{
k = i * 4 + 4;
for (j = k - 4; j < k; j++)
printf("%hu ", j);
printf("\b\n");
}
putchar('\b');
return 0;
}
这些不显示 Code2 的相同输出,因为 \b 不会删除任何内容。
我的问题:
我在 Code3 中尝试过的有什么标准方法吗?
我的问题的备注:
- 我已经搜索了互联网,但没有确定解决方案。
- 如果不清楚,请编辑问题。
编辑: 我不知道为什么我的问题没有用或没有建设性。虽然上面是一个任意的小例子,但是在处理大量数据时性能可能是一个问题。我认为从控制台输出中删除字符的方法可能会提高性能,并且可能有一种特定的方法可以做到这一点。这就是我问这个问题的原因。我可以在答案中写下以下代码。现在我通过 cmets 知道从控制台输出中删除字符是不可能的,因为它依赖于实现。
【问题讨论】:
-
问题不清楚:你的目标是输出代码 2 吗?如果是这样,为什么不以一种不放置'\n'和你不需要的空格字符的方式组织代码呢?
-
第 1 课:
'\b'只是发送到标准输出的一个字节。如果您的标准输出碰巧到达终端,终端可能会通过向后移动插入符号来响应(就像通过将插入符号向前移动几次来响应'\t'一样)。或者终端可能不会。这取决于实施。第2课:请不要过早优化!在ifs 中的任何时间输出字符到终端 DWARFS 的过程。
标签: c optimization console character output