使用命令行参数读取文本文件不起作用

时间:2015-03-06 03:10:10

标签: c pointers text makefile ncurses

所以我有一个名为temp

的目录
temp

它包含:

assets bin src include Makefile

assets目录包含一个“file.txt”文件,其中包含一些键盘字母字符。

我的src文件夹还包含文件“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

然而,在成功编译之后,进入bin目录并键入./runMe file.txt最终在屏幕上不打印任何新内容(不会打印文本文件中的字符“abc”(位于assets目录中) )。

出了什么问题?

2 个答案:

答案 0 :(得分:0)

如果您正在bin目录中运行可执行文件,那么您正试图在bin目录中打开您的文件,而不是。

从temp运行文件,如./bin/runMe file.txt,其中fopen行读取" assets / file.txt"

您必须明确指定运行程序的位置以及文件所在的位置。

答案 1 :(得分:0)

您正在一次读取一个字符并在同一位置(0,0)打印这些字符。我假设您应该在窗口的0,0位置看到文件中的最后一个字符。为什么不使用printf?

[编辑] 打印字符时,请增加x位置。

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