大家好,我需要一些C编程方面的帮助。 我需要写一个没有数字的ascii表:0,7-10,13。每个字母之间将是" \ t"在每10个字符之后它将跳过线。 我现在的代码:
void ascii()
{
int i;
for (i = 0; i <= 255; i++)
{
if (i == 0)
{
printf("\t");
}
if (0 == i % 10)
{
printf("\n");
}
printf("%d = %c\t", i, i);
}
return;
}
答案 0 :(得分:1)
为什么要排除这些代码?排除所有不可打印的代码不是更好吗? isprint
会做到这一点。
#include <ctype.h>
if (isprint(i)) printf("%d = %c\t", i, i);
如果要排除这些特定代码,可以使用与isxxx函数相同的技术:
char is_print[256] = { 0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1, /* 0 in pos 0, 7-10 and 13 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
}; /* Filter with 0 for the chars we want to exclude. */
int myIsprint(char c) {
return is_print((unsigned char)c); /* Use the filter */
}
在你的功能中:
if (myIsprint(i)) printf("%d = %c\t", i, i);
注意:强>
在简单的情况下,您也可以使用if
来测试特定代码if (i != 0 && i != 13 && (i < 7 || i > 10)) print...
。
上述滤波器技术具有闪电般快速的优点,即使案例数量很大,代码也易于阅读。
答案 1 :(得分:0)
你应该换
printf("%d = %c\t", i, i);
在if
- 声明中排除特殊情况:
if (!(i == 0 || (i >= 7 &% i <= 10) || i == 13)) {
printf("%d = %c\t", i, i);
}