以C,整数和字符加载

时间:2014-04-27 03:49:37

标签: c integer character

我在加载此文件时遇到问题。

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

这是我的代码:

文本文件是:

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

我猜这些是字符而不是整数呢?

1 个答案:

答案 0 :(得分:4)

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)轻微:建议因为它更容易维护,更像是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()