【发布时间】:2020-02-26 20:38:27
【问题描述】:
我正在从“C 编程语言”做一些练习,但无法弄清楚发生了什么来给我一定的输出。并不是真正的障碍,因为我得到了我想要的输出,但我不明白为什么更改我的某段代码实际上给了我想要的输出。只是在寻找解释。
这是按我想要的方式工作的代码。我不理解的部分是'k' for 循环中的s[++i] = ' ';。在我使用s[++i]之前,我使用过:
s[i] = ' ';
++i;
无论 k 循环运行多少次,它只会在数组中放置 1 个空格。
然后,为了测试,我将++i; 放在s[i] = ' '; 上方,我的输出中没有包含一个空格。
#include <stdio.h>
#define MAXLINE 1000
#define TABSTOP 5
/* Write a program "detab" that replaces tabs in the input with a proper
number of blanks to space to the next tab stop. Assume a fixed set of tab
stops, say every n columnns. Should n be a variable or a synbolic parameter? */
int main() {
char c;
int i, j;
int modTabStop, numTabs, k;
char s[MAXLINE];
i = 0;
while((c = getchar()) != EOF) {
if(c == '\t') {
modTabStop = i % TABSTOP;
numTabs = TABSTOP - modTabStop;
for(k = 0;k <= numTabs; ++k)
s[++i] = ' ';
}
else if(c == '\n') {
;
}
else {
s[i] = c;
++i;
}
}
for(j = 0;j <= i;++j)
printf("%c", s[j]);
return 0;
}
我只是想知道为什么s[++i] 有效而其他人都没有。我的预期输出在主函数上方的注释中定义。但为了澄清起见,我使用的是测试字符串“the(tab)dog”。当它正常工作时,应该只在“the”和“dog”之间放置 2 个空格来代替制表符,因为我的制表位是 5 并且“the”是三个字母长(“the(space)(space)dog” )。如果我将++i; 放在s[i] = ' ' 之后,那么我会在两者之间得到一个空格(“the(space)dog”)。如果我之前放置它,我就没有空格(“thedog”)。
我只是想确保在继续之前完全理解所有这些。谢谢大家!
【问题讨论】:
-
char c应该是int c因为getchar返回一个 int -
Ed,谢谢 - 从现在开始我会做出改变并记住这一点
标签: c loops for-loop post-increment pre-increment