2014-10-19 2 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, и я получаю сообщение «Ошибка сегментации»: 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', чтобы убедиться, что вы получаете все аргументы, которые вы надеетесь получить. –

+1

['while (! Feof (file))' is ** ALWAYS wrong! **] (http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) –

ответ

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 new to C. Мне нужно, чтобы это было частью моей главной функции, поэтому я могу использовать ваше решение? – Landon

+0

Да, вы можете пойти с ним. Просто запустите и проверьте, хорошо ли ваш * argv [1]. .., я собираюсь написать полную программу для вас ... – Riad

+0

выполните приведенный выше код с аргументами командной строки .. с параметрами ... и дайте мне знать, что вы получите .... – Riad

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

Смежные вопросы