[英]K&R C Exercise 1-18 no output/debugging issues
我将以下代码写在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行添加断点后,打开监视窗口,然后按开始箭头,什么都没有发生。 我的断点处没有黄色箭头,我的步骤选项显示为灰色,并且监视窗口中都没有显示我的变量名或其值。
修复代码的建议值得赞赏,但是我真正想知道的是我在做什么或不做什么,这阻止了调试器对我的帮助。
如果您没有看到任何输出,则可能是因为您的程序陷入了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++
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.