我一直在寻找解决方案,但似乎找不到解决我的问题的方法,所以我会问。我在 C 中工作,正在读取 .txt 并获取所有值并将它们存储在数组中,然后用它们执行各种任务。现在我的问题是,无论我做什么,由于某种原因,我都无法获得我创建的指向文件的文件指针。我过去曾为项目这样做过,然后将我的代码与当前代码进行了比较,但看不出问题所在。文件名也需要从命令行读取。我认为我通过命令行传递的内容有问题,但我不确定。我已经逐步完成并且文件名被正确传递但是当它试图打开时我得到一个空指针所以我只是缺少一些东西。
文本文件将包含一系列数字,第一个数字将是文件中第一个数字之后的数字数。 (因此,如果数字为 10,则在读入 10 后将有十个数字)在第一个数字之后,其余数字将以随机顺序排列为 0-9。
下面是我当前的代码块,仅涉及读取文件和存储其数据。 (我已经知道数组的大小为 10,这就是数组声明为该大小的原因。)
int main(int argc, char *argv[])
{
char* filename = "numbers.txt";
int arr[10];
int numElem;
int indexDesired = 0;
FILE *fp;
fp = fopen(filename, "r"); // open file begin reading
if (!fp)
{
printf("The required file parameter name is missing\n");
system("pause");
exit(EXIT_FAILURE);
}
else
{
fscanf(fp, "%d", &numElem); //scans for the first value which will tell the number of values to be stored in the array
int i = 0;
int num;
while (i <= numElem) //scans through and gets the all the values and stores them in the array.
{
fscanf(fp, "%d", &num);
arr[i] = num;
i++;
}
fclose(fp);
}
}
***注意:我的排序和交换方法工作得很好,所以我从代码中省略了它们,因为错误甚至在它们被调用之前就发生了。
最佳答案
你说,
The filename needs to be read in from the command line as well.
但是,您正在使用:
char* filename = "numbers.txt";
和
fp = fopen(filename, "r"); // open file begin reading
无论您在命令行中传递什么,您尝试打开的文件都是 "numbers.txt"
。
要尝试的事情:
使用
"numbers.txt"
的完整路径名,而不仅仅是文件名。char* filename = "C:\\My\\Full\\Path\\numbers.txt";
如果这不起作用,您可能必须处理权限问题。
使用完整路径从命令行传递文件名。如果没有权限问题,那应该可以工作。
if ( argc < 2 ) { // Deal with unspecified file name. } char* filename = argv[1];
传递文件名的相对路径。如果您从 Visual Studio 测试您的程序,您必须确保使用相对于 Visual Studio 启动程序的目录的路径。
关于c - 需要帮助读取 C 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812193/