C中的可变替代

时间:2016-04-22 18:02:04

标签: c variables substitution

我想打开一个文件。很容易。使用fopen()。但是,要打开的文件取决于用户输入。我对Korn Shell脚本有点精通,使用变量替换很容易做到:$(var)。我无法在C中找出正确的格式。有人可以给我一些见解吗? 我的代码 -

public static void main(String[] args) {
        CSVReader reader = new CSVReader();
        Scanner in = new Scanner(System.in);
        LinkedList[] entries = new LinkedList[14089];
        boolean running = true;

        reader.run("cities.csv", entries);

        while(running){
            String[] arg = in.nextLine().split("[,;:\\.\\s]+");

            if(arg[0].equals("retrieve")){
                search(arg[1], entries);
                System.out.println();
            }

            if(arg[0].equals("distance")){
                distance(arg[1], arg[2], entries);
                System.out.println();
            }

            if(arg[0].equals("stop")){
                stop(entries);
                running = false;
            }

        }
    }

}

我不确定如何在fopen字符串中包含用户输入。

3 个答案:

答案 0 :(得分:0)

执行scanf以获取用户的文件。

创建一个char数组来保存文件名。

char filename[15];

现在要求提供文件名:

printf("What is the name of the file?\n");

scanf("%s", &filename);

注意:包括FULL文件名。因此,如果我有一个名为filename的文字文档,则用户需要输入filename.txt

现在您有了可以声明文件指针的文件名

FILE * fp;

fp = fopen(filename, "r");

现在你应该能够扫描你的文件了!

fscanf(fp, "%d", &value);

编辑:我没有注意到您希望使用文件路径进行字符串连接。

由于您知道预定义路径,因此可以创建另一个包含该字符串路径的char数组

char fullPath[100];

char path[75] = "c:/Users/SeanA/C/";

现在您可以使用strcat将它们整合在一起!

strcat(fullPath, path);

strcat(fullPath, filename);

现在你做fopen(fullPath, "r");

答案 1 :(得分:0)

您必须手动连接两个字符串。像这样的东西

char* folder = "c:/Users/SeanA/C/";
char* path = malloc(strlen(fileA) + strlen(folder) + 1);
path = strcpy(folder);
path = strcat(fileA);

FILE *statsA = fopen(path, "r+");

free(path);//Always free your memory

答案 2 :(得分:0)

这是sprintf的用途。它的工作方式与printf类似,只是它的输出变为字符串而不是stdout

char filename[100];
sprintf(filename, "c:/Users/SeanA/C/%s", fileA);
statsA = fopen(filename, "r+");

此外,statsA内的main定义会掩盖文件范围内的定义。你可能想给这些不同的名字。