簡體   English   中英

文本未在輸出中打印

[英]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); 不正確,因為fpFILE *而不是字符串。 使用循環一次將文件內容復制一個字節。

這是更正的版本:

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM