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

标签 c arrays debugging codeblocks kernighan-and-ritchie

我在 Code::Blocks 中编写了以下代码,作为对 K&R C 练习 1-18 的响应:

Write a program to remove trailing blanks and tabs from each line of input, and to delete entirely blank lines.

我的意思是删除空白和制表符(我还没有解决空白行部分)。 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 行添加断点、打开监 window 口并按开始箭头后,没有任何反应。我的断点处没有出现黄色箭头,我的步骤选项呈灰色,并且我的变量名称及其值都没有显示在监 window 口中。

非常感谢有关修复我的代码的建议,但我真正想知道的是我正在做或没有做的事情阻止了调试器帮助我。

最佳答案

如果您没有看到任何输出,那么这可能是因为您的程序陷入了 for 循环:for (z = 0; ip[z] ...,如果字符串 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++

关于c - K&R C 练习 1-18 无输出/调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35517937/

相关文章:

c# - 使用 Ping 时蓝屏

ios - 如何在 Xcode 中分析应用程序的 IPS 文件?

c - 定义和声明应该匹配吗?

使用 OpenWatcom 编译并链接到 C 语言的二进制简单实模式操作系统

c - C 中的指针,从函数返回?

c - 为什么我在使用 rb_funcall 调用 Hash#has_key 时会出现段错误?

ruby - 当 (key => value) 存储在数组中时的哈希赋值? ( ruby )

python - 如何使用字典扫描列表中的部分外观?

javascript - 查找数组中出现次数为偶数的单词 - Javascript

c++ - gdb 无法索引到数组并打印值