【问题标题】:Modifying user-input file path to scan files in the same directory in C修改用户输入文件路径以扫描C中同一目录中的文件
【发布时间】:2017-12-02 04:48:35
【问题描述】:

我正在开发一个用户输入文件路径的程序,然后将带有文件名的附加字符串连接到该程序。我将把它用于同一目录中的多个文件。 我使用 printf 语句只是为了查看操作是否有效,但是当显示输出时文件路径打印两次,然后在末尾添加文件名。例如

输入文件路径为C:\Documents\

输出出来C:\Documents\C:\Documents\HR_1.txt

如何纠正?

相关代码如下

int main()
{
            char folder[50]="";
            printf("Please type file location\n");
            printf("An example of file location is C:\\Documents\\projects\\[Folder]\\");
            printf("\n");
            scanf("%s",folder);
            printf(folder);

            /*Clearing Heart rate file names, opening file*/
            FILE*HR1=NULL;
            printf(strcat(folder,"HR_1.txt"));
    }
}

【问题讨论】:

  • 请发布完整的代码来重现上述输出以及您的输入。
  • 欢迎来到 Stack Overflow。请尽快阅读 AboutHow to Ask 页面,但更重要的是,请阅读有关如何创建 MCVE (minimal reproducible example) 的信息。您需要展示声明,以及一个完整(但最少)的程序来说明您面临的问题。
  • 我已经添加了我的完整代码。此外,每当我只打印folder 时,输出与用户输入的完全相同
  • 请注意,当您对选项 1 代码感兴趣时,最小示例不会影响菜单打印或获取选项。请返回并重新阅读 MCVE 指南。注意:“最小”的意思是“如果不停止问题的重现,就无法删除任何东西”。
  • 请注意,您还没有展示如何定义变量folder。有很多方法做错了。

标签: c string file filepath data-manipulation


【解决方案1】:

您将两次调用 printf 的输出混合在一起。

printf 的第一个参数应该始终 是字符串文字,而不是变量。这可以防止意外的转义序列被解释,并允许您在格式中添加换行符。

因为您对printf 的两次调用,一次在追加之前,一次在追加之后,不包含换行符,它们出现在同一行。

所以改变这个:

        printf(folder);
        ...
        printf(strcat(folder,"HR_1.txt"));

收件人:

        printf("%s\n", folder);
        ...
        printf("%s\n", strcat(folder,"HR_1.txt"));

输出:

C:\Documents\
C:\Documents\HR_1.txt

【讨论】:

  • 添加标记以帮助发现不需要的字符可能会更好,例如printf("Before: [[%s]]\n", folder);After 类似。如果要多次使用该文件夹,则 OP 需要记录原始输入的结束位置,但这超出了当前的问题。
  • 感谢您的解决方案,这解决了使用文件名打印正确路径的问题。
猜你喜欢
  • 2011-12-30
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2013-06-16
  • 1970-01-01
相关资源
最近更新 更多