2014-10-19 174 views
0

我想輸入文件的名稱,然後顯示文件的內容(包含數字行)。我使用的代碼是:如何從文件中打印內容

#include <stdio.h> 
#include <stdlib.h> 

void main(int argc,char *argv[]) 
{ 
    FILE *file; 
    file = fopen(argv[1],"r"); 
    char line[100]; 

    while(!feof(file)){ 
     fgets(line,100,file); 
     puts(line); 
    } 
fclose(file); 
} 

當我嘗試在代碼塊中運行程序時,它只是崩潰了程序。我嘗試在Xcode中運行,並收到消息Segmentation fault:11,然後程序退出。有人可以幫忙嗎?

好了,所以我試圖做一種方式,但仍然沒有成功:

#include <stdio.h> 
#include <stdbool.h> 
#include <string.h> 

int main(int argc,char *argv[]) 
{ 
    FILE *file; 
    char line[100]; 
    file = fopen(argv[1],"r"); 

    do { 
     char c = fgetc(file); 
     if (c == EOF) break; 
     memset(line,0,100); 
     while ((c != '\n') && (c != EOF)) { 
      c = fgetc(file); 
     } 
     printf("%s",line); 

    } while (true); 
    fclose(file); 
} 
+2

打印'argc'以確保您獲得所有您希望獲得的參數。 – 2014-10-19 05:12:49

+1

['while(!feof(file))'是**總是錯!**](http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) – 2014-10-19 05:19:27

回答

0

試試這個:(確保文件的讀取是在同一個目錄下)

void main(int argc,char *argv[]) 
{ 
    FILE *file; 
    char ch; 
    if (argc > 1) { 
     file = fopen(argv[1],"r"); 
     //you can use argv[1] ... 
     // check if file is there ... 
     if(file == NULL) 
     { 
      //opening error...handle it by exit()... 
      printf("error..."); 
     } 
     while((ch = fgetc(file)) != EOF){ 
      printf("%c",ch); 
      exit(0); 
     } 

     fclose(file); 
    }else{ 
    printf("Not enough args"); 
    exit(0); 
    } 
} 

或者你可以使用直接調用文件沒有參數....

#include <stdio.h> 
#include <string.h> 

main() 
{ 
    FILE *fp; 
    char buff[255]; 

    fp = fopen("input.txt", "r"); 
    if(fp != NULL){ 
     while (!feof(fp)){ 
     memset(buff, '\0', sizeof(buff)); 
     fgets(buff, 255, (FILE*)fp); 
     printf("%s", buff); 
     } 
     fclose(fp); 
    } 
} 

input.txt應該在這個代碼文件的同一目錄。 ..

+0

抱歉, m新的C.我需要這個部分去我的主要功能,所以我還可以使用你的解決方案嗎? – Landon 2014-10-19 05:55:32

+0

是的,你可以用它去運行並檢查你的* argv [1]是否正常..我會爲你編寫完整的程序... – Riad 2014-10-19 06:15:18

+0

用命令行參數運行上面的代碼..與參數...並讓我知道你得到什麼.... – Riad 2014-10-19 06:27:38

0

錯誤的EOF檢測。

返回值fgets()會通知是否讀取了任何數據。檢查feof()爲時已晚。

if (file == NULL) Handle_OpenError(); 

//while(!feof(file)){ 
    // fgets(line,100,file); 
while (fgets(line,100,file) != NULL) { 

    puts(line); 
} 

注:fputs(line, stdout);而不是puts(line);,以避免額外的'\n'