在C中读取文本文件并忽略注释行

在C中读取文本文件并忽略注释行,c,parsing,C,Parsing,我目前正在用C语言制作一台微型计算机,用来完成一项编程任务,但有一部分我还没完成 我一直在思考如何正确地忽略我正在阅读的文本文件中的注释。(下面是文件输入的示例) 每条新行上的第一个输入是一个操作,第二个输入是一个地址。我计划为每个op使用一个switch语句,然后调用相应的函数。这是我在文件中读取的当前布局: //file handling int c; FILE * file; file = fopen(name, "r"); if (file){ printf("Run.\n");

我目前正在用C语言制作一台微型计算机,用来完成一项编程任务,但有一部分我还没完成

我一直在思考如何正确地忽略我正在阅读的文本文件中的注释。(下面是文件输入的示例)

每条新行上的第一个输入是一个操作,第二个输入是一个地址。我计划为每个op使用一个switch语句,然后调用相应的函数。这是我在文件中读取的当前布局:

//file handling
int c;
FILE * file;
file = fopen(name, "r");
if (file){
    printf("Run.\n");
    while ((c = getc(file)) != EOF){
        op = c;
        switch (op){
            case 5:
                print("Inside case 5\n");
        }
    }
    fclose(file);
}

如何忽略每行的//并跳到文件中的下一行?

使用
fgets
strtok
可以逐行读取,并根据
/
分隔符拆分字符串。下面是一个示例(虽然没有完全检查,但这是主要思想):


编辑:我刚刚意识到这并不是你想要的。但是,您仍然可以使用它,以便首先忽略注释,然后将给定字符串拆分为操作和地址,或者其他任何内容…

调用fgets以获得完整的行:

fgets(buffer, 100, file);
然后从行中提取两个数字:

sscanf(buffer, "%d%d", &instruction, &address);
如何正确忽略我正在阅读的文本文件中的注释
如何忽略每行的//并跳到文件中的下一行

使用
fgets()

使用
strstr()
查找
/
,并在该点处剪掉字符串

  char *slash_slash = strstr(buf, "//");
  if (slash_slash) {
    *slash_slash = '\0';
  }
根据需要继续处理该行

  ...
}

c=getc(文件)
不会做你想做的事。调用
strtol
(但这需要实际的C字符串才能通过)或将
case 5:
更改为
case“5”:
-但这对两位数字不起作用。我的猜测是,您必须对每一行进行多次读取。首先,你阅读操作。其次,您将读取一个空格(忽略),后跟一个地址。最后,您将读取(可能在循环中)一组空格和其他将被忽略的不相关字符,查找
\n
(换行符)。一旦找到换行符,就可以在下一行重新开始这个过程。请注意,整个过程非常依赖于保持相同结构的文件。一种方法是使用
fgets
读取整行,然后调用
strstr
查找
/
,如果找到它,则用
'\0'
覆盖第一个字符(即修改输入行缓冲区)在继续之前截断字符串。
strtok(buf,“/”将像strtok(buf,“/”)一样执行
char buf[80];
if (fgets(buf, sizeof buf, file)) {
  char *slash_slash = strstr(buf, "//");
  if (slash_slash) {
    *slash_slash = '\0';
  }
  ...
}