Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2012, 18:52   #1
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию Перевод десятичного числа в двоичное. Не могу найти ошибку.

Программа поочерёдно считывает числа из файла input.dat, переводит их в двоичный вид и записывает в output.dat. Первое число переводит нормально, а остальные некорректно. Помогите найти ошибку.
Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>

int const N  = 64;

main()
{
setlocale(LC_ALL,"RUS");
int bin[N];
int i = 0, kol_znak, x = 1, dec, ost, kol_bin = 0;
FILE *fin, *fout;
fin = fopen("..\\resources\\input.dat","r");
	if(fin == NULL)
	{
	printf("Нет файла данных");
	getch();
	return 1;
	}
fout = fopen("..\\resources\\output.dat","w");
	while(x > 0)
	{
	x = fscanf(fin,"%d", &dec);
		while(dec > 0)
		{
		ost = dec % 2;
		dec = dec / 2;
		bin[i] = ost;
		i++;
		kol_bin++;
		}
	kol_bin--;
		for(i = kol_bin;i >= 0;i--)
		{
		fprintf(fout,"%d",bin[i]);
		}
	fprintf(fout,"\n");
	}
fclose(fin);
fclose(fout);
printf("Готово");
getch();
}
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 29.12.2012, 18:57   #2
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

а почему вы не используете itoa?
укажите в последнем аргументе 2
и вы получите текст с 2 представлением.
и просто пишите в файл.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 21:27   #3
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Мне нужно стандартными методами.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 29.12.2012, 21:31   #4
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Че Гевара Посмотреть сообщение
Мне нужно стандартными методами.
ну как бы она стандартная а ваш способ это уже низкоуровневые битовые операции. это не стандарт. ибо об этом знают не каждый и учат не каждого ну не суть.

В принципе вашем коде проблематично искать.
попробуйте распилить его на куски.
ну или хотя бы перевод из 10 в 2. чтоб она строку возвращала.
а её просто записываете. ща напримере.
Код:
int itoa(const long num, char* text)
{
   char* p = text;
   long t = num, ost, c = 0;
   while(t > 0)
   {
		ost = t % 2;
		t = t / 2;
		sprintf(p,"%i", ost);
                p++;
                c++;
   }
   return c;
}
проверите, должно заработать.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Stilet; 29.12.2012 в 21:57.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 23:25   #5
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Спасибо, вроде разобрался. И всёравно хотелось бы знать, где же Я ошибся
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 30.12.2012, 02:13   #6
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Че Гевара Посмотреть сообщение
Спасибо, вроде разобрался. И всёравно хотелось бы знать, где же Я ошибся
скорее всего с bin_kol у меня подозрения на этот счётчик.
а так пёс его знает. я читая ваш код, не могу воспроизвести ваши мысли. комментов и нет. и вы уже не вспомните. Сложно сказать, но проблема явна там... его нужно сбрасывать как я понимаю... этот счётчик.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод числа из десятичного представления в двоичное на Си Kastet14 Помощь студентам 11 29.04.2016 16:49
Перевод из натурального десятичного числа в двоичное представление(string) Berserk0 Помощь студентам 3 17.06.2011 00:52
Программа перевода числа из десятичного в двоичное. MiraJe Qt и кроссплатформенное программирование С/С++ 7 16.01.2011 14:11
Преобразование десятичного числа в двоичное. Quize Паскаль, Turbo Pascal, PascalABC.NET 4 12.04.2008 16:09
C++. Перевод десятичного числа в двоичное Panterka Помощь студентам 15 12.12.2007 15:04