当程序正在读取"无法打开输入文件"这意味着大小为0.我用我的编辑器制作了输入文件,但我不确定问题是什么。我的代码有什么可能导致这个吗?或者我更有可能搞砸了input.txt文件?
#include <stdio.h>
#include <stdlib.h>
int load_data(char* filename, int *x, float *y)
{
int i=0;
FILE* file=fopen(filename,"r");
if(file==NULL)
{
return 0;
}
int size;
fscanf(file, "%d", &size);
for(i=0;i<size;i++)
{
fscanf(file, "%d%f", &x, &y);
}
fclose(file);
return size;
}
void print_data(int *acn, float *amt, int size)
{
int i;
int *p;
for(i=0;i<size;i++)
{
printf("%-10d%-10f ", *(acn+i), *(amt+i));
}
}
int main(int argc, char** argv)
{
int size=0, *x;
char *filename;
float *y;
if(argc!=3)
{
printf("\nInsufficient arguments.\n");
return 0;
}
int n=atoi(argv[2]);
int *acn;
float *amt;
int *fp=malloc(sizeof(int)*n);
if(size==0)
{
printf("\nUnable to open the input file.\n");
return 0;
}
load_data(filename, x, y);
print_data(acn, amt, size);
free(fp);
return 0;
}
答案 0 :(得分:0)
您的计划中存在许多问题 -
char *filename;
和函数int load_data(char* filename, int *x, float *y)
中
您正在传递filename
。但filename
中没有存储name of file
。 fscanf(file, "%d%f", &x, &y);
当您使用fscanf
%d
传递指针时,您不需要&
运营商。只会这样做 -
fscanf(file, "%d%f", x, y);
您需要使用malloc将内存分配到x
和y
。
size
不同,因为您在函数和main
中再次声明它。这就是为什么size
始终0
int main
}}
void print_data
在此函数中,您打印的是acn
和amt
的值,但指针都是未初始化的,并且您正在打印它,因此它会给出未定义的行为。
此外,您还有在程序中声明但未使用的指针。
答案 1 :(得分:0)
在以下代码行中(您已发布),size
变量的值为0
。在检查第if(size==0)
行之前,该值从未更新过。这就是if
检查返回true
并打印"Unable to open the input file"
。
您可能需要在size
检查之前设置if
变量的值。
int size=0, *x; //HERE YOU ARE WRITING "SIZE" VARIABLE
char *filename;
float *y;
if(argc!=3)
{
printf("\nInsufficient arguments.\n");
return 0;
}
int n=atoi(argv[2]);
int *acn;
float *amt;
int *fp=malloc(sizeof(int)*n);
if(size==0) //HERE YOU ARE READING/CHECKING "SIZE" VARIABLE. THERE IS NO CHECGE IN VARIABLE BEFORE THIS SO, VALUE IS STILL '0'
{
printf("\nUnable to open the input file.\n");
return 0;
}