【问题标题】:Loading in C, integers and characters加载 C、整数和字符
【发布时间】:2014-04-27 03:49:36
【问题描述】:

我无法加载此文件。

第一个数字是后续序列中有多少个字符/数字。我不知道/不知道如何判断这些是数字还是字符。

这是我的代码:

文本文件是:

3
001
100    



 int main(int argc, char** argv)

{
    int  *array =0;
    array = LoadConfig(argv[1]);
    return 0;
}

int* LoadConfig(char * Filename)
{
    FILE* fptr = fopen(Filename, "r");
    int n=0; //number of rows
    int poles=0;
    int i=0; //for loop index
    int scanreturn; //error check
    scanreturn = fscanf(fptr, "%d", &n); // n will be the number of rows
    poles = n*n - n;
    int *array  =malloc(sizeof(int)*(poles));
    for(i=0;i<poles;i++)
    {
        scanreturn = fscanf(fptr, "%d", &array[i]);
        if (scanreturn !=1)
        {
            printf("danger\n");
        }
        printf("%d: %d\n",i, array[i]);
    }
    printf("%d is n  %d is poles\n",n, poles);
    return array;
}


the output is :0: 1
               1: 100
               danger
               2: 0
               danger
               3: 0
               danger
               4: 0
               danger
               5: 0
               3 is n  6 is poles

我猜那些是字符而不是整数?

【问题讨论】:

    标签: c integer character


    【解决方案1】:

    1) 确保正确的原型设计。开始

    #include <stdio.h>
    #include <stdlib.h>
    int* LoadConfig(char * Filename);
    

    2) 只读取 1 位而不是无限位 - 这是您的主要问题

    // scanreturn = fscanf(fptr, "%d", &array[i]);
    scanreturn = fscanf(fptr, "%1d", &array[i]);
    

    3) Minor:建议,因为它更易于维护,更像calloc()

    // int *array  =malloc(sizeof(int)*(poles));
    int *array = malloc(poles * sizeof *array);
    

    4) 完成后确保在调用例程中释放array

    free(array);
    return 0;
    

    5) 检查fscanf() 结果

    scanreturn = fscanf(fptr, "%d", &n);
    if (scanreturn != 1) Oops();
    

    6) 推荐fgets()/sscanf() or strtox() 而不是fscanf()

    【讨论】:

    • 非常感谢。我会确保按照您的建议进行修改。
    • +1。你的意思是确保 :) 很抱歉我是个迂腐的人。
    • @ajay “Assure vs. Ensure vs. Insure”有相似的含义,略有不同,我同意“确保”在“确保正确的原型设计”中是最好的。无需道歉 - 我们随时为您提供帮助。
    猜你喜欢
    • 2012-04-14
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多