我有以下 C 程序:
#include <stdio.h>
int main()
{
char *filename;
FILE *fp1, *fp2;
int i, number;
fp1=fopen("TEST", "w");
for(i=10; i<=100; i+=10)
{
putw(i, fp1);
}
fclose(fp1);
printf("\nInput filename\n");
open_file:
scanf("%s", filename);
if((fp2=fopen(filename, "r"))==NULL)
{
printf("Cannot open the file.\n");
printf("Type file name again.\n");
goto open_file;
}
else
{
for(i=1; i<=20; i++)
{
number=getw(fp2);
if(feof(fp2))
{
printf("\nRan out of data\n");
break;
}
else
{
printf("%d\n", number);
}
}
fclose(fp2);
}
return 0;
}
我为 scanf("%s", filename);
输入了 TEST
。但是这个语句 if((fp2=fopen(filename, "r"))==NULL)
总是在执行,我的编译器正在打印 Cannot open the file
再次随机输入文件名
。这是一个 goto
语句。所以它应该等待另一个输入。但事实并非如此。哪里有问题??
最佳答案
char *filename;
是一个指针,没有为其分配内存。
尝试
char filename[100];
并提供有效的文件名。
关于编译器随机执行if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22551440/