我在Code :: Blocks中编写了以下代码作为对K& R C练习1-18的回应:
编写程序以从每行中删除尾随空白和制表符 输入,并删除完全空行。
我的意思是删除空白和标签(我还没有解决空行部分)。 while
循环正确地保存了对字符数组ip
的输入,但是,其余代码似乎没有工作,因为EOF
没有非法任何输出。
#include <stdio.h>
#define MAXLINE 1000
main(){
int c, z;
char ip[MAXLINE];
z = 0;
while ((c = getchar()) != EOF) {
ip[z] = c;
++z;
}
for (z = 0; ip[z] == ' ' || ip[z] == '\t'; ip[z] = ip[z + 1]);
printf("%s", ip);
}
我试图将此问题用作学习调试器的方法,但在第14行添加断点后,打开监视窗口,然后按开始箭头,没有任何反应。我的断点处没有出现黄色箭头,我的步骤选项显示为灰色,我的变量名称及其值都不会显示在监视窗口中。
我很欣赏有关修复代码的建议,但我真正想知道的是我正在做或不做的事情是阻止调试器帮助我。
答案 0 :(得分:0)
如果你没有看到任何输出,那么这可能是因为你的程序卡在for循环中:ip
,如果字符串remove = '\t'
string
source = 0
destin = 0
while
while string at source equals remove and not-equals null character
source++
string at destin = string at source
if string at source equals null character
break
source++
destin++
以两个连续的空格开头和/或标签。
删除某个字符的算法是这样的:
有两个变量可以索引字符串,目标和源中的位置。代码将在外部循环中。源索引将在内部循环中迭代,直到找到不是必须删除的字符或空字符之一的字符。然后将源索引中的字符分配给目标索引。然后代码检查源索引是否达到空字符,如果确实如此则中断外部循环。两个索引都递增,然后重复外循环。
在伪代码中:
setFetchSize