命令行参数问题

时间:2015-07-27 03:29:05

标签: c command line argv argc

当程序正在读取"无法打开输入文件"这意味着大小为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;
}

2 个答案:

答案 0 :(得分:0)

您的计划中存在许多问题 -

  1. 您是来自commal行的文件名,但未将其存储在char *filename;和函数int load_data(char* filename, int *x, float *y)中 您正在传递filename。但filename中没有存储name of file
  2. fscanf(file, "%d%f", &x, &y);当您使用fscanf %d传递指针时,您不需要&运营商。只会这样做 -

    fscanf(file, "%d%f", x, y);
    
  3. 您需要使用malloc将内存分配到xy

  4. 两个函数中的
  5. size不同,因为您在函数和main中再次声明它。这就是为什么size始终0 int main }}

  6. void print_data在此函数中,您打印的是acnamt的值,但指针都是未初始化的,并且您正在打印它,因此它会给出未定义的行为。

  7. 此外,您还有在程序中声明但未使用的指针。

答案 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;
}
相关问题