[英]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.