繁体   English   中英

使程序也从文件而不是标准输入中读取

[英]make program also read from file instead of stdin

如何更改以下代码,使其也遍历文件而不是仅通过stdin? 例如,如果我执行./detag blah ,那么该程序就可以工作,而等等是文本文件吗?

我用一个if语句,并尝试cat呢?

int main() {
   int in_tag = 0;
   char c;

   while ((c = getchar()) != EOF) {
       if (c == '<' || c == '>') {
           in_tag = (c == '<') ? 1 : 0;
       } else {
           if (!in_tag) {
               putchar(c);
           }
       }
   } }

一种简单的方法是更改​​调用方式,并使用重定向,例如

$ ./detag < blah

会通过stdin将blah的内容提供给您的程序,因此您不需要更改任何代码。

否则,您将不得不使用argv和argv定义main() 如果您希望它处理多个文件,则可以采用这种方法。

#include <stdio.h>

int main(int argc, char **argv) {
    int in_tag = 0;
    char c;
    FILE *fp;


    fp = fopen(argv[1],"r");
    if (fp == NULL){
        perror("Error");
    }
    else{
        while ((c = fgetc(fp)) != EOF) {
            if (c == '<' || c == '>') {
                in_tag = (c == '<') ? 1 : 0;
            } else {
                if (!in_tag) {
                putchar(c);
                             }
            }
         }
    }
}   

例:

[12:43:24] wthom@dragon21:~/test [30] cat blah
this is a line in blah
this is a line in blah too
[12:43:26] wthom@dragon21:~/test [31] ./a.out blah
this is a line in blah
this is a line in blah too

您可以调用将stdin指向文件的可执行文件。

与您的代码不同,您可以使用fopen http://www.cplusplus.com/reference/cstdio/fopen/打开文件,并使用fgetc http://www.cplusplus.com/reference/cstdio/getc/读取字符与使用getchar相同的方式。

使用fclose完成后关闭文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM