根据C中的输入搜索文件并从中读取

时间:2015-04-04 04:43:37

标签: c

我坚持为什么以下不起作用......

  

如果输入的文件名匹配 - >显示文件

     

如果输入的文件名与文件不匹配,则退出并显示错误代码。

目前无论我输入什么,它总是显示文件......

int c;
int str;
FILE *file;
int main(void);

   fprintf(stdout, "Please input a file you would like to retrieve\n");
    str = getchar();

    if(str = "success.txt")
    {
        file = fopen("success.txt", "r");
       if (file) {
            while ((c = getc(file)) != EOF)
                putchar(c);
                fclose(file);
}
    } else {
        fprintf(stderr, "The file you have requested does not exist\n");
    }

我也尝试过使用fscanf获得完全相同的结果。谁能指出我正确的方向?

我可以使用下面的内容吗?

char* path = "success.txt"; 
int rval; 
/* Check file existence. */ 
rval = access (path, F_OK); 
if (rval == 0) 
return 0 ; 
    else { if (errno == ENOENT) 
    { fprintf (stderr, "%s does not exist program will now exit", path);   
exit(0);
}
}

谢谢

3 个答案:

答案 0 :(得分:3)

在您的代码中,您将获得用户的角色。但是您正在使用string进行检查。

使用fgets获取用户的输入。

 char *fgets(char *s, int size, FILE *stream);

 int len=stlen(array)-1;
 if ( len > 0 && array[len] == '\n' )
          array[len] ='\0';

虽然您需要比较该文件,但请使用strcmp函数。

 if ( strcmp(array,"success.txt\n") == 0 )

答案 1 :(得分:1)

您无需检查用户输入的文件名。您可以尝试打开该文件,如果文件失败(fopen()返回NULL),则您所需的文件无法访问(您没有足够的权限)或文件根本不存在。检查errno的值将告诉您究竟出了什么问题。另外,我不明白为什么要求用户输入文件名,然后将其与硬编码名称进行比较。如果你想要一个具有常量名称的文件,那么硬编码是一个更好的选择。为什么要问用户这个名字是否真的重要而且不会改变?!你的设计完全有缺陷。您不需要执行所有操作只是为了查看输入文件名的正确性。

答案 2 :(得分:0)

您正在使用

中的赋值运算符
if( str = "success.txt" )

而不是等式条件("=="

编辑:在评论中,对于字符串,等于条件不起作用,你应该使用strcmp()

赋值运算符的计算结果为true,因为它能够成功分配值。

编辑:赋值运算符的计算结果为true,因为它分配了一个非零值,而不是因为它成功分配了它。