C语言问题~~删除末尾空白符的程序~~

来源:百度知道 编辑:UC知道 时间:2024/05/24 05:04:25
有这样一段程序。。
//把每个输入行中的制表符和空格都删除掉,并删除空格行。
#include <stdlib.h>

#define MAXQUEUE 1001

int advance(int pointer)
{
if (pointer < MAXQUEUE - 1)
return pointer + 1;
else
return 0;
}

int main(void)
{
char blank[MAXQUEUE];
int head, tail;
int nonspace;
int retval;
int c;

retval = nonspace = head = tail = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') {
head = tail = 0;
if (nonspace)
putchar('\n');
nonspace = 0;
}
else if (c == ' ' || c == '\t') {
if (advance(head) == tail) {
putchar(blank[tail]);
tail = advance(tail);
nonspace = 1;
retval = EXIT_FAILURE;
}

blank[head] = c;
head = advance(head);
}
else {

第一个问题:EXIT_FAILURE 是什么意思?? 这个程序里干嘛要用这个东西?
这个应该是一个宏,就是定义了一个值,写成这个名字好理解
#define EXIT_FAILURE (-1),否则你直接搞1个-1人家也不知道是什么意思
搞成名字就知道了,结果就是失败了,这个之便于阅读

第二个问题:为什么在main()函数的return 语句上要返回retval,而不是return 0 .
其实main的返回值是返回给系统的,无论你返回的是什么都不对程序造成影响
如果是0,告知系统程序运行正常退出,如果是其他值就是由异常。

第三个问题:为什么要定义一个函数advanse()??这个函数在这个程序里也就是 +1 的意思。。用++就行了。。为什么要定义一个函数这么麻烦、?? 其用意是什么、?
写成函数的好处有2点,1是便于阅读,而是便于使用, 因为里面不光是+1还有对数据值范围的判断,写成函数,每次都可以直接用这个函数,而不必每次都写这么一堆判断了

exit_failure 为错误时推出返回值
return 返回的值会因为不同的操作结果返回不同的值,return 0只能返回固定值,当文件中途有0字符时,返回exit-failure
advanse()判断下一个字符是否为0字符
一般的txt文本中不可能有0字符。所以加不加这段代码都一样。

垃圾程序