我坚持为什么以下不起作用......
如果输入的文件名匹配 - >显示文件
如果输入的文件名与文件不匹配,则退出并显示错误代码。
目前无论我输入什么,它总是显示文件......
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);
}
}
谢谢
答案 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,因为它分配了一个非零值,而不是因为它成功分配了它。