【问题标题】:The C Programming Language Exercise 1-9 ProblemC 编程语言练习 1-9 问题
【发布时间】:2020-08-22 05:10:27
【问题描述】:

我正在做这个 C 练习,但我做不到。 关于我做错了什么的任何线索? (我尽量不使用 scanf 或 printf)

编写一个程序将其输入复制到其输出,替换每个字符串 一个或多个空格乘以一个空格。

int main()
{
    int currentChar;
    int wasBlank = 0;
    while((currentChar = getchar()) != EOF){
        if (currentChar != ' ') {
            if (wasBlank) {
               putchar(' ');
               putchar(currentChar);
            }
            putchar(currentChar);
        }
        else
            wasBlank = 1;
    }
    return 0;
}

【问题讨论】:

  • wasBlank 永远不会重置。读取非空格字符时需要重置为0。
  • 你还缺少一个 else。
  • 啊,对。那解决了它。非常感谢

标签: c kernighan-and-ritchie


【解决方案1】:

"wasBlank ... needs to be reset to 0 when you read a non-space char. " 是一个很好的第一个想法,但不能解决EOF 之前的最后一个字符是单个空格的情况。

在第一次看到时打印空白,而不是重复的。

int main(void) {
  int previousChar = EOF;
  int currentChar;
  while((currentChar = getchar()) != EOF) {
    if (currentChar != ' ' || previousChar != ' ') {
      putchar(currentChar);
    }
    previousChar = currentChar;
  }
  return 0;
}

【讨论】:

  • OP 的问题不是“你能写这个程序吗”,而是“为什么我的程序会失败?”
  • @Caleb "wasBlank ... 当您读取非空格字符时需要将其重置为 0" 解释了失败。这个答案解释了为什么链接评论的隐含修复是不够的。然后显示修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 2020-06-25
相关资源
最近更新 更多