Pomijanie pętli for przy programie.

0

A więc problem jest taki. Mam kod źródłowy programu, w którym występuje błąd, którego nie umiem wyeliminować. Jestem jeszcze początkującym programistą, więc robię wiele błędów. Oto kod (po angielsku, bo cały system mam po angielsku więc nie pasowałby mi polski program):

#include <iostream>
#include <cstdio>

using namespace std;

void text_to_number();
void number_to_text();

int main()
{
	short what_to_do;
	char try_again[2];


		do
	{
	cout << "What would you like to do: " << endl;
	cout << "\t" << "1. Translate from text to numbers" << endl;
	cout << "\t" << "2. Translate from numbers to text" << endl;

		cin >> what_to_do;
		getchar();

	switch (what_to_do)
		{
			case 1: text_to_number();
				break;

			case 2: number_to_text();
				break;

			default: cout << "Wrong choice. Try again? [Yes/ else = quit]" << endl;
				 cin.get(try_again, 1);
		}
	} 	while((try_again[0] == 'Y') || (try_again[0] == 'y'));		//in try_again only first character matters, becouse of get.cin( ,1) 

return 0;
}

void text_to_number()
{
	char text_to_be_translated[501];

	cout << "\t\t\t\tTRANSLATE FROM TEXT TO NUMBERS:"<< endl << endl;
	cout << "Enter text to be translated:" << endl;
	cin.get(text_to_be_translated, 500);

	cout <<"This is translated text: " << endl;
	for (int i=0; text_to_be_translated[i] != 0 ; i++)
		cout << int(text_to_be_translated[i]) << " ";

	cout << endl;
}



void number_to_text()
{
	short number_to_be_translated[501], continuation=10 , how_many_letters=1;

	cout << "\t\t\t\tTRANSLATE FROM NUMBERS TO TEXT:" << endl << endl;

	for (int i=0; (continuation == 10 ) &&  (i != 500) ; i++)			//ENTER equals 10 in ASCII. __Tutaj jest problem.__
	{
		cout << "Enter number no. " << i+1 << " : " << endl;
		cin >> number_to_be_translated[i];
		getchar();

		cout << "Continue? [press ENTER to continue / else = quit]:  ";
		cin >> continuation;
		getchar();
		how_many_letters ++;
	}

	how_many_letters --;

	for (int i=0; i < how_many_letters; i++)
	{
		cout << char(number_to_be_translated[i]);
	}

	cout << endl;
}

zadaniem programu jest tłumaczenie tekstu/liczb w ASCII. Z góry dziękuję Wam za pomoc :)

1

Niestety, jezeli nie wskazesz gdzie Ci wyskakuje blad, to wielu uzytkownikow zrezygnuje

0

Błąd jest tam, gdzie w komentarzu pisze Tu jest problem :) przepraszam, że nie wspomniałem :) Fakt, że komentarze są kiepsko widoczne

1

Nie wiem czy dokladnie wiem co chcesz zrobic, ale jesli chcesz, zeby enter powodowal przeskoczenie petli, to w ten sposob tego nie zrobisz. Musialbys sie zainteresowac biblioteka Ncurses, z czym Ci nie pomoge. Lub skorzystaj do takiego programu z biblioteki conio.h

for(int i = 0; ...; ...)
{
    char znak = getch();
    if(znak != '\n')
        break;
}
0

Nie mogę skorzystać z tej biblioteki, bo jestem na linuxie a na niego nie ma biblioteki conio.h ani jeśli się nie mylę żadnej jej odpowiednika :) ale dziękuję.

1

Co za system..
W takim ukladzie poszukaj na temat biblioteki ncurses lub termios.h, tam sa odpowiedniki getch'a

0

System świetny :) Sabayon :) ok poszukam. Jeszcze raz wielkie dzięki :)

1
for(int i = 0; i < 500; i++)
{
    //twoj kod
    char c = cin.get();
    if(c != '\n') break; //konczy petle
    //w przeciwnym wypadku kontynuuje
}

O to chodziło?

0

Tak o to. Kolega napisał to samo wyżej :)

0

Trochę zmieniłem kod. Nadal nie wiem, co jest nie tak. Nie chce się uczyć nowych bibliotek. Idę zgodnie z podręcznikiem i nie chce odchodzić jakoś od tego, żeby sobie nie namieszać, więc wymyśliłem taki sposób. Niestety nie działa on dobrze. Błąd w tej funkcji, którą zaznaczyłem komentarzem.

 
#include <iostream>
#include <cstdio>

using namespace std;

void text_to_number();
void number_to_text();

int main()
{
	short what_to_do;
	bool EXIT = false;


		for(;;)
	{
	cout << "What would you like to do: " << endl;
	cout << "\t" << "1. Translate from text to numbers" << endl;
	cout << "\t" << "2. Translate from numbers to text" << endl;
	cout << "\t" << "3. EXIT" << endl;
		cin >> what_to_do;
		getchar();

	switch (what_to_do)
		{
			case 1: text_to_number();
				break;

			case 2: number_to_text();
				break;

			case 3: EXIT = true;
				break;

			default: cout << "Wrong choice. Try again..." << endl << endl << endl;
		}

	if (EXIT == true)
		break;

	} 	

return 0;

}

void text_to_number()
{
	char text_to_be_translated[501];

	cout << "\t\t\t\tTRANSLATE FROM TEXT TO NUMBERS:"<< endl << endl;
	cout << "Enter text to be translated:" << endl;
	cin.get(text_to_be_translated, 500);

	cout <<"This is translated text: " << endl;
	for (int i=0; text_to_be_translated[i] != 0 ; i++)
		cout << int(text_to_be_translated[i]) << " ";

	cout << endl;
}



void number_to_text() // W TEJ FUNKCJI WYSTĘPUJE BŁĄD
{
	short number_to_be_translated[501], how_many_letters=1;
	char continuation[2]= {'y' , '\0' };

	cout << "\t\t\t\tTRANSLATE FROM NUMBERS TO TEXT:" << endl << endl;

	for (int i=0; (continuation[0] =='y' || continuation[0] == 'Y') &&  (i != 500) ; i++, how_many_letters++)			
	{
		cout << "Enter number no. " << i+1 << " : " << endl;
		cin >> number_to_be_translated[i];
		getchar();

		cout << "Continue? [press "Y" or "y"  to continue / else = quit]:  ";
		cin.get (continuation, 1); 
		getchar();
		cout << endl;
	}


	for (int i=0; i < how_many_letters; i++)
	{
		cout << char(number_to_be_translated[i]);
	}

	cout << endl;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1