我有一个程序在for循环中多次确定int,fc1的值,并使用fprintf将其输出到文件。
for (i=0; i<80; i++)
{
fc1 = somefunction(); // this function determines if fc is 0 or 1
// printing fc1 to stdout
printf("%d\n", fc1);
// printing output to file
fprintf(out, "%d ", fc1);
}
每当我运行80次或更少次循环时,文件输出就像预期的那样:
1 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0
然而,一旦我循环81次或更多次,文件输出就是垃圾..
‱‰‱‰‱‱‰‰‰‰‱‰‱‱‱‱‰‰‰‱‱‰‱‱‱‰‱‰‰‱‱‱‰‰‱‰‰‱‰‱‰‱‰‱‱‰‱‱‰‰‰‱‰‱‰‱‰‰‱‱‰‰‱‰‰‰‰‰‰‱‱‱‰‱‰‱‰‱‰‰‱
不管怎么说,即使我正在打印一个整数,它也会输出U + 2030和U + 2031。
当我尝试
时fprintf(out, "%d", fc1);
fputc(' ', out); // i changed the fprintf to fprintf the int and fputc the space
没有什么变化,这个问题仍然会发生,但是当我做的时候
fprintf(out, "%d", fc1);
fputc(' ', out);
fputc(' ', out);
不知怎的,它有效!输出将有2个空格,
1 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0 1
有人能告诉我使用fprintf有什么问题吗?
其他一些信息
编辑:
这里是somefunction()
int fc(int a, int b, int c, int d, int e)
{
int bits = a*10000+b*1000+c*100+d*10+e;
switch(bits)
{
case 0:
case 1:
case 100:
case 101:
case 111:
case 1000:
case 1001:
case 1110:
case 1111:
case 10000:
case 10001:
case 10010:
case 10100:
case 10110:
case 11010:
case 11110:
return 1;
break;
default:
return 0;
break;
}
}
以及我打开文件指针的方式
FILE *out = fopen("out.txt", "w");
我用Windows上的记事本打开输出文件
答案 0 :(得分:3)
查看ASCII表,尤其是
的条目您的程序似乎做的一切正确,但您的查看器太聪明完全离开了。
尽管如此,仍有希望:您可以强制您的观众在开场或观看期间使用特定的编码,或者您可以切换到另一个。
BTW:Windows上的记事本使用启发式黑盒函数IsTextUnicode
来判断文本是否为unicode。