如何在使用 getchar() 的程序上输入 /n和其他混淆

问题描述

我承认这是一个非常松散的标题。

我正在做一个练习,我们的任务是创建一个程序来删除尾随空格并删除空行。在线发布的解决方案之一受到好评,但是,当我运行代码时,它甚至似乎没有做任何事情。这是我所指的解决方案,其中有一段简短的摘录让我感到困惑

程序规范不明确:是否“完全空白行”
意思是不包含换行符以外的任何字符的行,或者是否包含 包括由空格和制表符后跟换行符组成的行?这 此处采用后一种解释。

所以他说代码应该删除空行,但我认为它不会,至少在我运行它时不会。而且我不知道您将如何输入新行作为输入,因为当您按 Enter 时,它不会跳过一行,而是接受您的输入并继续运行程序。他继续提到“空格和制表符后跟一个换行符”,但同样......当 enter 运行程序时换行符是什么?如果你只是通过按一个制表符或空格键来让行留空,程序不会删除这些行,它会打印出相同的空行,所以我真的不知道他的程序在做什么或他在做什么谈论。

#include <stdio.h>
#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 {
      while (head != tail) {
        putchar(blank[tail]);
        tail = advance(tail);
      }
      putchar(c);
      nonspace = 1;
    }
  }
  return retval;
}

除了运行代码之外,我还使用调试器逐步完成了它,我发现它有点令人困惑,但我什至不想进入它,直到我弄清楚它甚至试图完成什么或为什么当它似乎没有完成任何事情时,它就会受到表扬。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...