[英]Text not being printed on output
我試圖弄清楚為什么不打印,我試圖從通過命令提示符輸入的文本文件中打印每個字母,但是我只是得到一個空輸出...我在做什么錯,為什么呢?這行不通嗎? 我覺得這在邏輯上應該可行。 謝謝。
int main(int argc, char *argv[]) {
FILE *fp;
int i;
for (i = 1; i < argc; i++) {
printf("%s\n", argv[i]);
fp = fopen(argv[i], "r");
while (!feof(fp)) {
puts(fp);
}
fclose(fp);
}
return 0;
}
您正在嘗試打印文件指針:
puts(fp);
閱讀puts()
的手冊-這不是必需的。
要按字符讀取字符並在標准輸出上打印,可以執行以下操作:
int ch;
fp = fopen(argv[i], "r");
if (!fp) {
perror("fopen");
exit(1);
}
while((ch=fgetc(fp)) != EOF) {
putchar(ch);
}
flcose(fp);
除非您將多個文件名作為參數傳遞,否則外部循環就沒有多大意義。
您的程序有多個問題:
您無需測試fopen()
的返回值:如果無法將任何命令行參數作為讀取流打開,則程序將調用未定義的行為。
while(!feof(fp))
不正確。 讀這篇: 為什么“ while(!feof(file))”總是錯誤的?
puts(fp);
不正確,因為fp
是FILE *
而不是字符串。 使用循環一次將文件內容復制一個字節。
這是更正的版本:
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *fp;
int i, c;
for (i = 1; i < argc; i++) {
fp = fopen(argv[i], "r");
if (fp == NULL) {
fprintf(stderr, "cannot open %s: %s\n", argv[i], strerror(errno));
} else {
printf("%s\n", argv[i]);
while ((c = getc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
}
}
return 0;
}
int main(int argc, char *argv[]) {
FILE *fp;
int i;
char buff[128];
for (i = 1; i < argc; i++) {
printf("\n%s\n", argv[i]);
if(NULL == (fp = fopen(argv[i], "r"))){//check open file
perror("fopen");
continue;
}
while (fgets(buff, sizeof buff, fp)) {//read into buffer
fputs(buff, stdout);//print buffer (not add newline)
}
fclose(fp);
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.