我在将十六进制值扫描到C中的数组时遇到问题

时间:2016-03-22 22:56:48

标签: c arrays scanf

我正在尝试使用fscanf()将包含十六进制值的.dat文件扫描到一个数组中。我的程序成功扫描文件并将值放入数组中,但当我将它们打印回控制台时,值会大不相同。以下代码是我的函数,它打开文件并进行扫描。我正在使用test.txt文件,其中包含值“1 2 3 4 5 6 7 8 9 a b c d e f”。当我运行程序时,在控制台中打印的是5个十六进制值,每次运行后都会更改,然后是“0 ffffffff 0 0 0”。

void sim(int bytes, int lines, int sets, int policy){
    int i = 0;
    int total_Misses = 0;
    int total_References = 0;
    FILE *f1 = fopen("test.txt", "r");
    if (f1 == NULL){
        printf("File failed to open");
        exit(0);
    }
    unsigned int a[10];

    while (i < 10){

        fscanf(f1, "%x", &a[i]);
        printf("%x ", a[i]);
        i++;
    }
}

1 个答案:

答案 0 :(得分:0)

代码看起来不错,所有注释都指向输入问题。我建议你修改代码以便捕获错误:

while (i < 10){

    if (fscanf(f1, "%x", &a[i])==1) {
        printf("%x ", a[i]);
        i++;
    }
    else printf ("Error reading field %d\n", i);
}

P.s。:a[10]是一个自动变量,未初始化。因此,不读取数组条目的值将打印您正在经历的未初始化的垃圾值。

P.p.s。:我经常看到scanf大师在%符号之前添加一个空格以跳过前导空格。