gpt4 book ai didi

C - 使用用户输入文件名

转载 作者:行者123 更新时间:2023-11-30 16:48:09 26 4
gpt4 key购买 nike

我在尝试从用户输入打开文件时遇到问题。如果第一次输入的文件名正确,我可以打开它,但如果在 while 循环中文件名正确,则不能打开它。

    char file[256], *end;
printf("Enter the name of the file: ");
fgets(file, 256, stdin);
if((end=strchr(file, '\n'))!=NULL)
*end='\0';
FILE *fp=fopen(file, "r");
while(fp==NULL)
{
printf("The given file doesn't exist. Enter a file name: ");
fgets(file, 256, stdin);
if((end=strchr(file, '\n'))!=NULL)
*end='\0';
FILE *fp=fopen(file, "r");
}

最佳答案

I can open it if the filename is correct the first time it's entered, but can't if it's correct in the while loop.

不,你被愚弄了。问题在于 while(fp==NULL) 中的循环条件测试在循环外部和循环内部声明的变量 fp 的值循环中您从未设置该变量,因此如果您进入循环,您将永远不会退出。

但这并不意味着您在第二次或后续尝试中无法打开文件。在循环内,您声明另一个变量 fp,“隐藏”外部的变量,并将 fopen() 的结果分配给它。当此 fopen() 成功时,您实际上会忽略结果。

正如另一个现已删除的答案所说,主要要做的是修复循环,以便它使用与外部使用的相同的fp。实现的最小更改将产生此版本的循环:

while(fp==NULL)
{
printf("The given file doesn't exist. Enter a file name: ");
fgets(file, 256, stdin);
if((end=strchr(file, '\n'))!=NULL)
*end='\0';
fp=fopen(file, "r");
}

输入文件名的方式还有一些其他问题,无论是在此处还是在前面的代码中,以及一些不必要的代码重复,但只要用户输入的文件名简单而简短,就可以就可以了。

关于C - 使用用户输入文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43076649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com