【发布时间】:2014-03-20 14:09:53
【问题描述】:
我在使用 C 语言的程序时遇到问题,我认为 for 循环是罪魁祸首,但我不确定。该函数旨在获取已经通过反向函数传递的char[],并将其写入另一个char[],并删除所有尾随空格字符。也就是说,位于'\n' 和任何其他字符之间的任何' ' 或'\t' 字符都不应成为输出的一部分。
如果没有尾随空格字符,它就可以完美地工作,就像重写输入 char[] 的精确副本一样。但是,如果有的话,根本就没有输出。
程序如下:
#include<stdio.h>
#define MAXLINE 1000
void trim(char output[], char input[], int len);
void reverse(char output[], char input[], int len);
main()
{
int i, c;
int len;
char block[MAXLINE];
char blockrev[MAXLINE];
char blockout[MAXLINE];
char blockprint[MAXLINE];
i = 0;
while ((c = getchar()) != EOF)
{
block[i] = c;
++i;
}
printf("%s", block); // for debugging purposes
reverse(blockrev, block, i); // reverses block for trim function
trim(blockout, blockrev, i);
reverse(blockprint, blockout, i); // reverses it back to normal
// i also have a sneaking suspicion that i don't need this many arrays?
printf("%s", blockprint);
}
void trim(char output[], char input[], int len)
{
int i, j;
i = 0;
j = 0;
while (i <= len)
{
if (input[i] == ' ' || input[i] == '\t')
{
if (i > 0 && input[i-1] == '\n')
for (; input[i] == ' ' || input[i] == '\t'; ++i)
{
}
else
{
output[j] = input[i];
++i;
++j;
}
}
else
{
output[j] = input[i];
++i;
++j;
}
}
}
void reverse(char output[], char input[], int len)
{
int i;
for (i = 0; len - i >= 0; ++i)
{
output[i] = input[len - i];
}
}
我应该注意到这是一个不允许使用字符串函数的类分配,因此它是如此迂回。
【问题讨论】:
-
这就是为什么我喜欢匹配括号在同一列中的阶梯
-
或者只是任何一致的缩进样式。看起来你一开始在这里有
while/else。 -
整理出缩进 - 然后也许能够发现问题。您是否考虑过使用调试器?
-
稍微清理了一下。对不起,这只是我的第二个帖子,我是一个 C 新手。不过现在应该更容易阅读了。
-
你确定你得到一个无限循环吗?看起来你会在
for (i; input[i] == ' ' || input[i] == '\t'; ++i);附近遇到分段错误
标签: c arrays function loops infinite-loop