从作为命令行争论传递的文件中读取

Rav*_*mer 2 c linux scanf filereader

我试图解析给定的文本文件,但到目前为止,我的程序似乎没有正确读取.

#include <stdio.h>


int main(int argc, char *argv[])
{
    FILE *fr; //file pointer
    int buildingFloors = 1;

    printf("sanity check\n");  

    fr = fopen (argv[0], "r");
    fscanf(fr, "%d", &buildingFloors );

    printf("%d\n", buildingFloors);

    fclose(fr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译程序并使用以下命令在我的redhat linux机器上运行它:

./sjf file.text
Run Code Online (Sandbox Code Playgroud)

file.text是一个文本文档,第一个字符为"4".所以我希望我的输出是

sanity check
4
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的程序时,我反而得到了

sanity check
1
Run Code Online (Sandbox Code Playgroud)

这意味着fscanf没有在第一个字符中正确读取 - 4.我是否有一些语法错误阻止了预期的代码功能?我应该扫描一个字符,然后以某种方式将其转换为int?

Ada*_*eld 5

argv[0]是程序的名称(./sjf在您的情况下),所以您试图读取自己的程序的可执行文件.使用argv[1],而不是拿到第一个真正的程序参数.