【问题标题】:The C language K&R Exercise 1-8C 语言 K&R 练习 1-8
【发布时间】:2013-02-19 08:01:11
【问题描述】:

我现在坐在 K&R The C programming Language 上。我在 1 个练习 1-8 上有筹码。
锻炼它自己。

编写一个程序,将每个制表符替换为三个字符序列 >、退格、-,将其打印为 →,并将每个退格替换为类似的 ←。这使制表符和退格键可见。

据我了解,该练习要求我在制表符和退格键中制作指向箭头。但我不知道如何在 C 中将 2 个字符剪辑在一起
这是它自己的程序

#include <stdio.h>
main ()  
{  

int c;

while ((c=getchar()) !=EOF)
{
    if (c == '\t')
        printf(">->->\b");
    if (c == '\b')
        printf("<-<-<-\b");
     if (c !='\t')
         if (c !='\b')
              putchar(c);

}   

  getchar();
}

那么我的错误在哪里,你能在这里帮助我吗?

【问题讨论】:

  • 我认为这三个的退格字符是为了擦除制表符,但是我不太确定退格是否可以擦除另一个退格。我发现这里的问题陈述模棱两可。此外,我在 K&R 第 2 版中找不到完全相同的问题。
  • @Alexey Frunze:是的,我在程序中犯了一个小错误,我应该做 '>\b-' 但我的编译器不支持那种代码,它只显示 '-' 。 K&R 第 2 版没有正确答案

标签: c


【解决方案1】:

想要的顺序是

>\b-

请注意,这可能不适用于现代终端模拟器,因为大多数不支持叠印字符。最初的想法是模仿旧的打字机技术,即打印一个字符,将一个字符支持头部,然后在前一个字符的顶部打另一个字符。

如果您的终端支持 UTF-8,您可以替换 '→' Unicode 字形(U+2192 RIGHTWARDS ARROW),它以 UTF-8 编码为

\xe2\x86\x92

同样,'←' (U+2190) 是

\xe2\x86\x90

【讨论】:

  • @user2023937:就像我说的,如果您使用的是现代终端模拟器,它可能无法正常工作。如果您使用的是不支持 UTF-8 的终端仿真器,那么您很不幸。 (如果你在 Windows 上,试试 MinTTY;在 Linux 上,gnome-terminal 或 Konsole 应该可以工作;在 OS X 上,系统提供的 Terminal.app 支持 Unicode)。
  • 我正在使用 Visual Studio 。 Thx 会尝试这些
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
相关资源
最近更新 更多