K& R C练习1-18没有输出/调试问题

时间:2016-02-20 01:16:49

标签: c arrays debugging codeblocks kernighan-and-ritchie

我在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行添加断点后,打开监视窗口,然后按开始箭头,没有任何反应。我的断点处没有出现黄色箭头,我的步骤选项显示为灰色,我的变量名称及其值都不会显示在监视窗口中。

我很欣赏有关修复代码的建议,但我真正想知道的是我正在做或不做的事情是阻止调试器帮助我。

1 个答案:

答案 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