我用
./file.exe test.in | od -c
对于在标准输出上打印,即使是printf("someString")
打印的隐藏字符,如"\t"
或"\n"
,问题是即使是"\0"
也会打印,但不应该。
输出:
0000000 3 1 \t 2 7 \n \0 S S S S E E E E E
0000020 N N W W N N E E E E E S S S S S
0000040 S S S E \0 \0
0000046
我试着这样打印:
printf("%d",mov);
printf("\t");
printf("%d",wets);
printf("\n");
for (i = mov; i >= 0; i--) {
printf("%c",movement[i]);
}`
在第1-4行中,我尝试对每个需要打印字符使用printf()
,而不是只使用一个printf
1条答案
按热度按时间xlpyo6sf1#
问题的根源似乎是
for
循环的奇异使用。尽可能避免所有没有惯用形式的循环:for(size_t i=0; i<n; i++)
其他类型的循环对每个人来说都是不必要的,包括你自己。非惯用循环从不同于0的索引开始,或者在不同于
<n
的条件下结束,或者它们使用不同于简单++
的其他迭代器修改,或者它们向下计数等。有时候没有其他的方法,那么使用其他形式也是可以的,但是不要不必要地这样做,因为代码变得更难阅读。在你的例子中,你从一个计数器开始,向下计数,同时
i>=0
。这在逻辑上相当于从i=0;
向上计数到i<=n
,意味着增加了一个项目。在大多数情况下意味着一个数组越界访问错误。要以相反的顺序显示某些内容,您可以像这样编写循环: