2015-03-06 4 views
0

Так что я получил каталог, который называется температураЧтение текстового файла с помощью аргументов командной строки не работает

temp 

Он содержит:

assets bin src include Makefile 

Каталог активов содержит «file.txt ", который заполнен некоторыми алфавитными символами клавиатуры.

Моя папка ЦСИ также включает в себя файл «file.c», который

#include "file.h" 

int main(int argc, char * argv[]) 
{ 
    initscr(); 
    noecho(); 
    cbreak(); 

    char ch; 
    FILE * ptr; 

    if(strcmp(argv[1],"file.txt") == 0) 
    { 
     ptr = fopen("file.txt","r"); 

     if(ptr == NULL) 
     { 
      mvprintw(0,0,"Error reading the file\n"); 
      refresh(); 
      exit(1); 
     } 
     else 
     { 
      while((ch =fgetc(ptr)) != EOF) 
       mvprintw(0,0,"%c",ch); 
       refresh(); 
     } 
    } 
    else 
    { 
     mvprintw(0,0,"you didn't specify the right .txt file"); 
     exit(1); 
    } 
    endwin(); 

    fclose(ptr); 
    return 0; 
} 

Makefile, содержит:

all: 
     gcc -Wall -pedantic -std=c99 -Iinclude src/file.c -o bin/runMe -lncurses 

Однако после успешной компиляции, идя в каталог бен и набрав ./runMe file.txt концы (не печатает на экране ничего нового (не печатает символы «abc», которые находятся в текстовом файле (находится в каталоге активов).

Что случилось?

+1

Учитывая ваш пример, он должен напечатать «вы не указали правильный файл .txt» (потому что код хочет «input.txt») вам необходимо поставить обновление после печати делать? Вызов exit() сразу после удаления любого вывода? Кроме того, вы должны только называть 'fclose (ptr);' когда вы успешно открываете файл и выполняете его. – jschultz410

+0

Этот код выглядит странно. Похоже, вы должны передать ему файл с именем «input.txt» от текущего директора, из которого вы выполняете, или он не сработает. Когда он терпит неудачу, он печатает сообщение об ошибке с ncurses, но существует и, вероятно, очищает окно с помощью 'endwin'. – lurker

+0

'Любопытно, что вы проверяете, что пользователь указывает 'file.txt', но вы открываете' input.txt'. Это не удается - в каталоге 'bin' нет' input.txt'. Даже если вы очистите его, чтобы открыть 'argv [1]' вместо фиксированного имени, вы должны указать '../ assets/file.txt', если вы запустите программу в каталоге' bin'. –

ответ

0

Если вы используете исполняемый файл из каталога bin, то вы пытаетесь открыть файл в каталоге bin, где это не так.

Запустить файл от температуры, так как ./bin/runMe file.txt где Еореп линия читает «активы/file.txt»

Вы должны быть явным, когда вы запускаете программу и где файл ,

0

Вы читаете по одному символу за раз и печатаете эти символы в том же месте (0, 0). Я предполагаю, что вы должны увидеть последний символ, содержащийся в вашем файле, в позиции 0, 0 вашего окна. Почему бы не использовать printf?

[EDIT] При печати символов увеличивайте положение x.

int x= 0; 
while((ch =fgetc(ptr)) != EOF) { 
      mvprintw(x,0,"%c",ch); 
      x++; 
} 
+0

Потому что я должен использовать библиотеку ncurses. – user20842454566

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