K&R 练习 1-23

K&R exercise 1-23

我有两个与标题练习相关的问题,来自 The C Programming Language。我敢肯定他们之前都已经回答过,所以无论是直接回答还是 link 到之前的 post(我找不到)都将不胜感激。

练习本身是编写一个从 C 代码中删除注释的 C 程序。

  1. 我看过很多这个程序的例子,但我不知道如何测试它。他们都使用 getchar() 来 "acquire" 他们要编辑的代码,但我不知道如何告诉程序读取另一个文件,而不是等待命令行的输入.我尝试了“./a.out program_to_edit.c”,但是没有用。或者,如果有一种简单的方法可以像其他语言一样用文本块(而不是一次一个字符)创建一个字符串,那也可以。

  2. 这个问题比较笼统。在使用 getchar() 读取 C 源代码时,我对转义字符的工作方式感到困惑。如果我在 TextEdit 中查看 .c 文件,我会看到“\t”,但如果我编译它并打印出来,它会以制表符的形式出现。这是否意味着 .c 文件包含 '\\' 和 't' 并且编译器将它们组合在一起,还是完全不同?如果我使用 getchar() return 读取该文件,它会发生什么?

谢谢。

对于你问题的第一部分,你读了一个类似这样的文件。 您应该在 "The Book."

中找到这方面的示例
#include <stdio.h>

int main(void)
{
    FILE *fp = fopen("Some_file.txt","rt");
    if (fp != NULL)
    {
        int c = fgetc(fp);
        while (c != EOF)
        {
            /* Do something with c */
        }

        fclose(fp);
    }
    else
    {
        printf("Can't open the file?\n");
    }

    return 0;
}

对于问题的第二部分,反斜杠指示反斜杠和下一个字符被替换。

  • /t 被 (char) 9 替换,这是 ascii 制表符。
  • /a 被 (char) 7 取代,这是一个可听到的铃声
  • /n 在 unix 系统上被 (char) 10 取代,在 dos 系统上被 (char)13, (char) 10 取代。

重读一些内容。 它在 "The Book."

欢迎来到 Stack Overflow。

  1. 重定向标准输入:./a.out < program_to_edit.
  2. 转义表示仅存在于源代码中。编译器将它们转换为适当的字符。