У меня есть программа, которая много раз определяет значение int, fc1, в цикле for и выводит его в файл с помощью fprintf.fprintf печать странных символов в цикле for
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?
Некоторые дополнительная информация
- Все переменные INT
- указатель файла устанавливается правильно
- fc1, безусловно, имеет 1 или 0 каждый раз, когда проходит цикл (потому что я напечатает значение на стандартный вывод и я могу видеть его 0 или 1)
- GNU GCC компилятор, MingW CodeBlocks 12,11 на Windows 7
EDIT:
вот 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");
открыть выходной файл с помощью блокнота на окнах
Сообщение 'somefunction' или все, что мы можем сделать, это угадать. Несомненно, вы либо переполняете размер хранилища, либо массив в своем цикле. Вы можете циклически и распечатывать все значения с помощью '% d' между« 2147483648 - 2147483647 »с int и никогда не иметь никаких проблем, но как только вы заставляете ваш int превышать' выше/ниже', вы либо переполнились, либо отклонились 'undefined behavior', если вы не справитесь с этим. –
Можете ли вы показать, как открыть файл 'out'? Какие флаги вы используете? Кроме того, какое программное обеспечение вы используете для чтения файла 'out'? Поддерживает ли он кодировку UTF-8? – SSC
, если вы открываете этот файл с помощью блокнота ++ или что-то, что они могут вывести из кодирования, что вызывает вашу проблему. попробуйте заставить просмотр в iso-8859-1 или ASCII ... –