![](/img/trans.png)
[英]Reading an input file and ignoring blank lines or lines starting with # in C
[英]Reading a text file and ignoring commented lines in C
我目前正在用C语言制作一台微型计算机以进行编程任务,但我只停留在一部分上。
我一直在研究如何正确忽略正在阅读的文本文件中的注释。(下面的文件输入示例)。
Input File
5 5 //IN 5
6 7 //OUT 7
3 0 //STORE 0
5 5 //IN 5
6 7 //OUT 7
3 1 //STORE 1
1 0 //LOAD 0
4 1 //SUB 1
3 0 //STORE 0
6 7 //OUT 7
1 1 //LOAD 1
6 7 //OUT 7
7 0 //END
每条新行的第一个输入是一个操作,第二个输入是一个地址。 我计划为每个操作准备一个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以获取完整行:
fgets(buffer, 100, file);
然后从该行中提取两个数字:
sscanf(buffer, "%d%d", &instruction, &address);
如何正确忽略正在阅读的文本文件中的注释
如何忽略每行// //并跳至文件的下一行?
使用fgets()
阅读该行
char buf[80];
if (fgets(buf, sizeof buf, file)) {
使用strstr()
@Steve Summit查找//
,然后在该位置断开字符串。
char *slash_slash = strstr(buf, "//");
if (slash_slash) {
*slash_slash = '\0';
}
根据需要继续处理生产线。
...
}
通过使用fgets
和strtok
您可以逐行阅读并根据//
分隔符分割字符串。 这是一个示例(尚未完全检查,但这是主要思想):
FILE *f = fopen("file.txt", "r");
if (f== NULL)
{
printf("opening file failed\n");
return 1;
}
char buf[256] = { 0 };
while (fgets(buf, 256, f))
{
char *s = strtok(buf, "//");
if (s == NULL)
{
printf("s == NULL\n");
}
else
{
printf("%s\n", s);
}
memset(buf, 0, 256);
}
fclose(f);
编辑:我只是意识到这不是您想要的。 但是,您仍然可以使用它来首先忽略注释,然后将给定的字符串分成操作和地址,或其他任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.