K& R练习1-23

时间:2015-06-21 03:07:29

标签: c stdio kernighan-and-ritchie

我有两个与名义练习有关的问题,来自C编程语言。我确信他们之前都已经得到了回复,所以我们将非常感谢您直接回答或链接到之前的帖子(我无法找到)。

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

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

  2. 这个问题有点笼统。在使用getchar()读取C源代码时,我对转义字符的工作原理感到困惑。如果我在TextEdit中查看.c文件,我会看到" \ t",但是如果我编译并将其打印出来,那么它将作为制表符出现。这是否意味着.c文件包含' \\'并且' t'并且编译器将它们组合在一起,还是完全不同于其他东西?如果我用它来读取该文件,getchar()会返回什么内容?

  3. 感谢。

2 个答案:

答案 0 :(得分:3)

对于问题的第一部分,您阅读的文件类似于此。 你应该在" 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替换。

做一些重读。 它出现在&#34; The Book。&#34;

欢迎使用Stack Overflow。

答案 1 :(得分:0)

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