Форум программистов, компьютерный форум CyberForum.ru

Почему после выполнения команды cprintf значения строк затираются? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ формирование нового массива http://www.cyberforum.ru/cpp-beginners/thread195171.html
формировать новый массив из элементов кратных 3 (на языке Си) заранее спасибо)
C++ Сортировка вектора Подскажите, пожалуйста, как можно отсортировать вектор, заполненный структурами DataStruct, используя алгоритмы сортировки stl? Критерий сортировки - поле key1, например. struct DataStruct { int key1; int key2; string key3; } http://www.cyberforum.ru/cpp-beginners/thread195167.html
C++ Добрый день!(а точнее вечер) Немогли бы объяснить почему зацикливается программа?
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. F= a*x*x +b*x +c(при a<0 и с не равном 0) F=-a/(x-c)(при a>0 и с=0) F=a(x+c)(в остальных случаях) где а,b, с — действительные числа. Функция F должна принимать действительное значение, если выражение Ац И (Вц ИЛИ Сц) не равно нулю, и целое значение в противном случае. Через Ац, Вц и...
C++ Работа с Heap
Помогите найти ошибку а то я что-то уже зае**** Так работает if(!data){//первый вызов функции if(data=(uchar*)my::malloc(newDataSize)){ my::memcpy(data,newData,newDataSize); dataSize=newDataSize,totalAllocSize=newDataSize; } }
C++ Есть текст. Требуется(мне) написать программу для вывода каждого слова в столбик и рядом, чтоб было написано, сколько раз упоминается в тексте http://www.cyberforum.ru/cpp-beginners/thread195153.html
Мои очередные жалкие попытки написать код: #include <sstream> #include <iostream> #include <string> #include <fstream> #include <stdio.h> using namespace std; int main() { ifstream ifs("x.txt");
C++ Отсортировать слова в строке! Есть множество слов, упорядочить их так, чтобы буква, на которую слово заканчивается, начинало следующее подробнее

Показать сообщение отдельно
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011

Почему после выполнения команды cprintf значения строк затираются? - C++

22.11.2010, 00:23. Просмотров 668. Ответов 5
Метки (Все метки)

Здраствуйте. Помогите пожалуйста, что это может быть, что вот уже больше дня играюсь с билдером и он непонятно что творит. Например, написана функция для ввода текста в многострочном поле определенной длины:
Код
int InputSMS(char *str, int lim, float pric)
{
	char cyrilic[]="АБВГґДЕЄЖЗИЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгдеєжзиїйклмнопрстуфхцчшщьюя";
	int charCount=0,x,y,i,k,n,z;
	//for(i=0;i<=lim;i++) str[i]='\0';
	x=wherex(); y=wherey();
    lim--;
	//str[0]=0;str[lim]=0;
	int key=0,tmp=0,tmp2=0,del=70;
    gotoxy(59,6);
	textbackground(7);
	cprintf("0");
	gotoxy(59,7);
	cprintf("1  ");
	gotoxy(59,8);
	cprintf("%1.2f ",pric);
	textbackground(3);
	gotoxy(x,y);
	for(i=0;key!=13;i++)
	{
		key=getch();
		if(key>=32 || key<=-3)
		{
			if(charCount>lim)
			{
				i--;continue;
			}
			tmp=str[i];
			for(int j=i;j<lim-1;j++)
			{
				tmp2=str[j+1];
				str[j+1]=tmp;
				tmp=tmp2;
			}
			str[i]=key;
			charCount++;
			gotoxy(59,6);
			textbackground(7);
			z=strlen(str);
			cprintf("%i  ",z);
			if(z){
				if(strpbrk(str,cyrilic)==NULL) del=160;
				else del=70;
				gotoxy(59,7);
				cprintf("%i  ",z/del+1);
				gotoxy(59,8);
				cprintf("%1.2f",(z/del+1)*pric);
			}
			textbackground(3);
			if(strlen(str)>36){
				k=(z-1)/36;
				gotoxy(x,y+k);
				for(n=k*36;n<=z-1;n++)
					cprintf("%c",str[n]);
				gotoxy(x+i+1-k*36,y+k);
			}else{
				gotoxy(x,y);
				cprintf("%s",str);
				gotoxy(x+i+1,y);
			}

			continue;
		}

		if(key==8)
		{
			if(wherex()==x)
			{
				i--;continue;
			}
			k=(strlen(str)-1)/36;
			gotoxy(x+charCount-1-k*36,y+k);
			cprintf(" ");		
			gotoxy(wherex()-1-k*36,wherey()+k);
			tmp=str[charCount-1];
			for(int j=charCount-1;j!=i-1;j--)
			{
				tmp2=str[j-1];
				str[j-1]=tmp;
				tmp=tmp2;
			}
			charCount--;
			str[charCount]=0;
			gotoxy(59,6);
			textbackground(7);
			cprintf("%i  ",strlen(str));
			if(strlen(str)){
				if(strpbrk(str,cyrilic)==NULL) del=160;
				else del=70;
				gotoxy(59,7);
				cprintf("%i  ",strlen(str)/del+1);
				gotoxy(59,8);
				cprintf("     ");
				gotoxy(59,8);
				cprintf("%1.2f",(strlen(str)/del+1)*pric);
			}
            i-=2;
			textbackground(3);
			if(strlen(str)>36){
				k=(strlen(str)-1)/36;
				gotoxy(x,y+k);
				for(n=k*36;n<=strlen(str)-1;n++)
					cprintf("%c",str[n]);
				gotoxy(x+i+1-k*36,y+k);
			}else{
				gotoxy(x,y);
				cprintf("%s",str);
				gotoxy(x+i+1,y);
			}
			continue;
		}

		if (key==13)
		{
			if(!i)
			{
                key=0;
				i--;
				continue;
			}
			str[charCount]=0;
			break;
		}

		if(key==27) return 27;

		if(key==0xE0)
		{
			i--;
			continue;				
		}
	if(key==0){
		key=getch();
		if(key==75)
		{
			if(wherex()==x)
			{
				if(wherey()==y){
					i--;
					continue;
				}else{
					gotoxy(wherex()+35,wherey()-1);
					i-=2;
					continue;
				}
			}
			gotoxy(wherex()-1,wherey());
			i-=2;
			continue;
		}

		if(key==77)
		{
			if(wherex()==lim+5 || charCount==i)
			{
				i--;
				continue;
			}
			gotoxy(wherex()+1,wherey());
			continue;
		}
	}
		i--;continue;
	}
}
Эта функция в пятницу у меня еще благополучно работала и благополучно вводила текст. Но со вчерашнего вечера непонятно по каким законам и с какого чуда тупо перетала работать. Вот к примеру вот в этом месте:
Код
			str[i]=key;
			charCount++;
			gotoxy(59,6);
			textbackground(7);
			z=strlen(str);
			cprintf("%i  ",z);
при i=0 str[0] благополучно получает значение key. Но как только выполняется команда cprintf("%i ",z) - так значение str[0] стает равным 0 С какого чуда и с какого перепуга и по каким законам природы такое случается?

Это только один глюк... А если продолжить рассказ:
Код
z=strlen(str);
			cprintf("%i  ",z);
			if(strlen(str)){
				if(strpbrk(str,cyrilic)==NULL) del=160;
				else del=70;
				gotoxy(59,7);
				cprintf("%i  ",z/del+1);
				gotoxy(59,8);
				cprintf("%1.2f",(z/del+1)*pric);
			}
			textbackground(3);
			if(strlen(str)>36){
				k=(z-1)/36;
				gotoxy(x,y+k);
				for(n=k*36;n<=z-1;n++)
					cprintf("%c",str[n]);
				gotoxy(x+i+1-k*36,y+k);
			}else{
				gotoxy(x,y);
				cprintf("%s",str);
				gotoxy(x+i+1,y);
			}
После выполнения z=strlen(str) значение z=1. Значит strlen(str) тоже равно 1. Но как только доходим до if(strlen(str)), так программа игнорирует то, что внутри оператора условия и идет на else. С какого перепуга условие if не выполняется, если strlen(str)==1 !?:megashok:

И таких глюков в программе еще пару десятков.

Например, есть такой случай:

Код
void MyFunction()
{
тут куча кода...
куча кода...
Window(1,2,79,24,1,0,'n'); //эта команда выполняется и после нее ничего нет.
//А значит управление должно перейти в главную функцию. Но... смотрите в int main
}

int main()
{
куча функций и команд...
куча функций и команд...
куча функций и команд...
MyFunction();
команда после функции //эта команда не выполняется!!...
}

Я долго ломал голову, от чего же это так, пока в пошаговом исполнении программы я случайно не поставил брекпойнт на закрывающую скобку функции MyFunction(). И как оказалось, после выполнения последней команды в функции управление переходит на нее. Я нажимаю Play(для продолжения работы программы после остановки на брекпойнте), после чего программа снова отсаовилась на скобке. Я снова нажимаю Play - она снова на скобке. Я взял и поставил брекпойнты тупо на всех строчках кода, и как оказалось, после выполнения вот этой функции программа переходит на скобку } и выполняется на ней бесконечно

Я тупо в ауте. И это я не все глюки перезвал. Уже больше года имею дело с средами программирования и самим программированием, но такие чудеса, которые не вкладываются ни в какие законы физики, математики или программирования я вижу впервые :megashok:

Что это может такое быть?:'( Помогите пожалуйста, очень прошу. У меня уже просто идеи кончились и я смотрю в монитор квадратными глазами и не знаю что делать. Другое дело, если бы знать причину глюков, а так ведь они эти глюки появляются там, где такое вообще невозможно практически, и программа работает по каким-то аномальным законам
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru