fprintf到.txt文件中给出的是0而不是0 0 0 0 1 1 1 1 1 1 1

时间:2016-01-01 18:22:37

标签: c

这是我第一次尝试使用c写入文件。

产生问题的部分如下:

for (j = 0; j < num_probs; j++) {
    fprintf(dataMy, "%i ", data_my[j]);
}

附加信息:data_my是一个int数组,只填充0和1(很多)

如果执行代码,则只有这些符号

‰‰‰‰‱‱‱‱‱‱‱

而不是

0 0 0 0 1 1 1 1 1 1 1

在我的.txt文件中。

如果我将%i中的fprintf(dataMy, "%i ", data_my[j])更改为%2i,每次打印时会显示2个字符,但由于我只使用0或1(每个1个字符),因此其中一个是空格键。或者我可以写%i也可以,但我想在没有空格键的情况下启动我的.txt文件。

这是我的完整计划:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

#define num_annos    523
#define num_probs    1910
#define meine_zeile  59

int data[num_annos][num_probs];

void main() {    
    int i, j;
    FILE *f = NULL;
    FILE *dataMy = NULL;

    errno_t err;
    int data_my[num_probs];

    if ((err = fopen_s(&f, "H:\\Hochschule\\Informatik\\UebungenIII\\Daten für A6_15WS_all\\datamatrix_v5_1.txt", "r")) != 0) {
        printf("The file was not opened\n");
    } else {
        printf("Datei erfolgreich geoeffnet!\n\n");

        for (i = 0; i < num_annos; i++) {
            for (j = 0; j < num_probs; j++) {
                fscanf_s(f, "%i", &data[i][j]);
                printf("%2i", data[i][j]);
            }
            printf("\n");
        }
        fclose(f);
        printf("\n\nEinlesen erfolgreich.\n");
    }

    for (j = 0; j < num_probs; j++) {
        data_my[j] = data[meine_zeile-1][j];
    }

    if ((err = fopen_s(&dataMy, "H:\\Hochschule\\Informatik\\UebungenIII\\Daten für A6_15WS_all\\data_my.txt", "w")) != 0) {
        printf("The file was not opened\n");
    } else {            
        for (j = 0; j < num_probs; j++) {
            fprintf(dataMy, "%i ", data_my[j]);
            printf("%i ", data_my[j]);
        }
        fclose(dataMy);
    }
    getch();
}

它从datamatrix_v5_1.txt读取0和1(此文件只填充0 1 1 0 1 0 1 0 1 ......等等),将其中一行保存到数组data_my中多数民众赞成我想要打印到data_my.txt

1 个答案:

答案 0 :(得分:8)

字符‰和‱分别具有Unicode代码点0x20300x2031。编码为UTF-16然后解释为ASCII,这些是' 0'' 1''0 ''1 ',具体取决于字节顺序。看起来你的ASCII输出被解释为好像它是UTF-16。

如果在宽字符流上执行逐字节输出,则会发生这种情况。这也可能是因为您的编辑器的编码检测例程出现故障(参见Bush hid the facts)。尝试在编辑文件时手动设置文本编码或使用ea不同的编辑器。