这是我第一次尝试使用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
。
答案 0 :(得分:8)
字符‰和‱分别具有Unicode代码点0x2030
和0x2031
。编码为UTF-16然后解释为ASCII,这些是' 0'
和' 1'
或'0 '
和'1 '
,具体取决于字节顺序。看起来你的ASCII输出被解释为好像它是UTF-16。
如果在宽字符流上执行逐字节输出,则会发生这种情况。这也可能是因为您的编辑器的编码检测例程出现故障(参见Bush hid the facts)。尝试在编辑文件时手动设置文本编码或使用ea不同的编辑器。