• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Program się zapsuł

Object Storage Arubacloud
+1 głos
415 wizyt
pytanie zadane 6 czerwca 2015 w C i C++ przez DavidMCPolska Bywalec (2,770 p.)
zamknięte 6 czerwca 2015 przez DavidMCPolska

Jeszcze wczoraj program działał, a teraz jak już go skończyłem dziwne napisy wyświetla i nie spełnia swojego zadania. Nagrałem film z tym problemem obejrzcie go: KLIK

Macie jeszcze screenshot ostrzeżeń KLIK

I kod:

// Ta aplikacja wyznaczy tajny kod według twojego imienia lub jakiegoś wyrazu :)
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <cstdio>
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <algorithm>
#include <iomanip>

using namespace std;

void changecol(int numofcol)
{
	HANDLE Kolor;
	Kolor = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(Kolor, numofcol);
}

int polecenie;

int main()
{
	SetConsoleTitleA("Kod Imienia Lub Wyrazu");

	setlocale(LC_ALL, "polish"); //Ustawienie polskich znaków

	cout << setprecision(1000);

	for (;;)
	{
		system("cls");

		polecenie = 0;

		changecol(3);
		cout << "                Ten program wyznaczy tajny kod dla twojego imienia!" << endl;
		changecol(15);
		cout << "======================================MENU======================================";
		changecol(10);
		cout << "1. Start Programu" << endl;
		cout << "2. Zasada działania" << endl;
		cout << "3. Zamknij program" << endl;
		changecol(15);
		cout << "================================================================================";
		cout << "                         Wpisz numer polecenia: ";
		cin >> polecenie;
		
		if (polecenie == 1)
		{
			const int tabD = 27;
			char tab[tabD] = { ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
				'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

			changecol(10);
			system("cls");
			cout << "===========================Wpisz swoje imię lub wyraz===========================";

			string imie;
			cout << endl << endl << endl;

			cin.ignore();
			getline(cin, imie);

			int dlugosc = imie.length();

			if (dlugosc > 20)
			{
				changecol(4);
				cout << "Twój wyraz: " << "ma " << dlugosc << "/20 znaków. Niestety trzeba zamknąć program :(";
				Sleep(5000);
				exit(0);
			}
			else
			{

				transform(imie.begin(), imie.end(), imie.begin(), ::toupper);
				int i3;
				int i2;
				long double liczba[20];
				int razy;

				cout << endl << endl;

				for (razy = 0; razy < 40; razy++)
				{
					liczba[razy] = 50;
				}

				for (i2 = 0; i2 < dlugosc; i2++)
				{
					for (i3 = 0; i3 < tabD; i3++)
					{
						if (imie[i2] == tab[i3]) liczba[i2] = i3;
					}
				}
				for (int i6 = 0; i6 < dlugosc; i6++)
				{
					if (liczba[i6] == 50)
					{
						changecol(4);
						cout << "No, w konsoli trudno jest zamienić polskie znaki na zwykłe, więc lepiej wpisz" << endl << "bez polskich znaków" << endl << endl << "Niestety trzeba wyłączyć program, bo napotkał krytyczny błąd";
						cout << endl << endl << "Dane wyjściowe: "; changecol(4); cout << imie;
						Sleep(7000);
						exit(0);
					}
				}
				cout << "Wprowadzony wyraz: " << imie << endl << endl << "Naciśnij dowolny klawisz, aby obliczyć kod..." << endl;
				_getch();

				long double mnoznik = 0.1;

				for (int i7 = 0; i7 < dlugosc; i7++)
				{
					mnoznik = mnoznik * 10;
					liczba[i7] = liczba[i7] * mnoznik;
					cout << liczba[i7] << endl;
				}
				long double kod;
				for (int skl = dlugosc; skl < 20; skl++)
				{
					liczba[skl] = 0;
				}
				kod = liczba[0] + liczba[1] + liczba[2] + liczba[3] + liczba[4] + liczba[5] + liczba[6] + liczba[7] + liczba[8] + liczba[9] + liczba[10] + liczba[11] + liczba[12] + liczba[13] + liczba[14] + liczba[15] + liczba[16] + liczba[17] + liczba[18] + liczba[19];
				cout << kod;

				_getch();
			}
		}
		else if (polecenie == 2)
		{
			cout << "Narazie ten program nie działa :(";
			_getch();
		}
		else if (polecenie == 3)
		{
			changecol(7);
			system("cls");
			cout << "Zamykanie...";
			Sleep(500);
			exit(0);
		}
		else if (cin.fail())
		{
			cout << "Ktoś tu chyba nie umie wpisać polecenia :(((";
			Sleep(2000);
			cin.clear();
			cin.sync();
			continue;
		}
		else
		{
			cout << "Ktoś tu chyba nie umie wpisać polecenia :(((";
			Sleep(2000);
		}
	}
	return(0);
}

 

komentarz zamknięcia: Jestem głupi, bo robię okropne błędy przez które ludzie tracą czas.... :(

4 odpowiedzi

0 głosów
odpowiedź 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
edycja 6 czerwca 2015 przez DavidMCPolska
 
Najlepsza
Hej, odkryłem, że po wykonaniu pętli for (razy = 0; razy < 40; razy++)
                {
                    liczba[razy] = 50;
                }

zmienna imie się czyści, zauważyłem, że wyraz przecież ma maksymalnie 20 liter, a w tej pętli jest 40!!!!!!!

Jakimś cudem zmieniłem na

for (razy = 0; razy < 20; razy++)
                {
                    liczba[razy] = 50;
                }

I wszystko pięknie działa!!!

Jak mogłem tego nie zauważyć?
komentarz 6 czerwca 2015 przez draghan VIP (106,230 p.)
Proszę Cię, ja już nie mam do Ciebie siły. Nie analizowałem Twojego algorytmu, skupiałem się na tym, dlaczego Twój system wariował. Wnioski wyciągnij sam.

Ja szczerze mówiąc nawet nie wiem, po co są tam te wszystkie pętle for. Nie mam czasu na to, żeby to analizować. Ani ochoty.

Powodzenia w dalszej nauce!
komentarz 6 czerwca 2015 przez NeroTestero Gaduła (3,240 p.)
Kolego nastepnym razem napisz trochę kodu i sprawdź czy nie wywala błędu. Wtedy masz kontrole na kodem :}

Człowiek się myli czasem...
komentarz 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
Bardzo przepraszam za to zamieszanie :( Czasem moje błędy są takie głupie, że....
komentarz 6 czerwca 2015 przez draghan VIP (106,230 p.)
A cóż ja miałem napisać? :)
komentarz 6 czerwca 2015 przez draghan VIP (106,230 p.)
No, bywa. :) Ale na szczęście już problem rozwiązałeś. :)
0 głosów
odpowiedź 6 czerwca 2015 przez draghan VIP (106,230 p.)

U mnie na Linuksie problem sprawił warunek

if (liczba[i6] == 50)

Był prawdziwy, niezależnie od wprowadzonych danych. Kiedy go zakomentowałem, wszystko zdaje się działać. Dla 'draghan' program generuje duuuużą liczbę. :D

Sugeruję restart systemu, czasem sam Windows działa jak opętany.

komentarz 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
// Ta aplikacja wyznaczy tajny kod według twojego imienia lub jakiegoś wyrazu :)
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <cstdio>
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <algorithm>
#include <iomanip>

using namespace std;

void changecol(int numofcol)
{
	HANDLE Kolor;
	Kolor = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(Kolor, numofcol);
}

int polecenie;

int main()
{
	SetConsoleTitleA("Kod Imienia Lub Wyrazu");

	setlocale(LC_ALL, "polish"); //Ustawienie polskich znaków

	cout << setprecision(1000);

	for (;;)
	{
		system("cls");

		polecenie = 0;

		changecol(3);
		cout << "                Ten program wyznaczy tajny kod dla twojego imienia!" << endl;
		changecol(15);
		cout << "======================================MENU======================================";
		changecol(10);
		cout << "1. Start Programu" << endl;
		cout << "2. Zasada działania" << endl;
		cout << "3. Zamknij program" << endl;
		changecol(15);
		cout << "================================================================================";
		cout << "                         Wpisz numer polecenia: ";
		cin >> polecenie;
		
		if (polecenie == 1)
		{
			const int tabD = 27;
			char tab[tabD] = { ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
				'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

			changecol(10);
			system("cls");
			cout << "===========================Wpisz swoje imię lub wyraz===========================";

			string imie;
			cout << endl << endl << endl;

			cin.ignore();
			getline(cin, imie);

			int dlugosc = imie.length();

			if (dlugosc > 20)
			{
				changecol(4);
				cout << "Twój wyraz: " << "ma " << dlugosc << "/20 znaków. Niestety trzeba zamknąć program :(";
				Sleep(5000);
				exit(0);
			}
			else
			{

				transform(imie.begin(), imie.end(), imie.begin(), ::toupper);
				int i3;
				int i2;
				long double liczba[20];
				int razy;

				cout << endl << endl;

				for (razy = 0; razy < 40; razy++)
				{
					liczba[razy] = 50;
				}

				for (i2 = 0; i2 < dlugosc; i2++)
				{
					for (i3 = 0; i3 < tabD; i3++)
					{
						if (imie[i2] == tab[i3]) liczba[i2] = i3;
					}
				}
				for (int i6 = 0; i6 < dlugosc; i6++)
				{
					if (liczba[i6] == 50)
					{
						changecol(4);
						cout << "No, w konsoli trudno jest zamienić polskie znaki na zwykłe, więc lepiej wpisz" << endl << "bez polskich znaków" << endl << endl << "Niestety trzeba wyłączyć program, bo napotkał krytyczny błąd";
						cout << endl << endl << "Dane wyjściowe: "; changecol(4); cout << imie;
						Sleep(7000);
						exit(0);
					}
				}
				cout << "Wprowadzony wyraz: " << imie << endl << endl << "Naciśnij dowolny klawisz, aby obliczyć kod..." << endl;
				_getch();

				long double mnoznik = 0.1;

				for (int i7 = 0; i7 < dlugosc; i7++)
				{
					mnoznik = mnoznik * 10;
					liczba[i7] = liczba[i7] * mnoznik;
					cout << liczba[i7] << endl;
				}
				long double kod; //Od tąd zaczyna się to co dodałem
				for (int skl = dlugosc; skl < 20; skl++)
				{
					liczba[skl] = 0;
				}
				kod = liczba[0] + liczba[1] + liczba[2] + liczba[3] + liczba[4] + liczba[5] + liczba[6] + liczba[7] + liczba[8] + liczba[9] + liczba[10] + liczba[11] + liczba[12] + liczba[13] + liczba[14] + liczba[15] + liczba[16] + liczba[17] + liczba[18] + liczba[19];
				cout << kod; //A tu się kończy

				_getch();
			}
		}
		else if (polecenie == 2)
		{
			cout << "Narazie ten program nie działa :(";
			_getch();
		}
		else if (polecenie == 3)
		{
			changecol(7);
			system("cls");
			cout << "Zamykanie...";
			Sleep(500);
			exit(0);
		}
		else if (cin.fail())
		{
			cout << "Ktoś tu chyba nie umie wpisać polecenia :(((";
			Sleep(2000);
			cin.clear();
			cin.sync();
			continue;
		}
		else
		{
			cout << "Ktoś tu chyba nie umie wpisać polecenia :(((";
			Sleep(2000);
		}
	}
	return(0);
}

Masz na komentarzu napisane gdzie. A dodałem to dlatego, bo po to właśnie ma służyć program, to wypisywało w konsoli zwrócony kod wpisanego wyrazu.

komentarz 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
No ale ja żadnych prekompilowanych nagłówków nie dodawałem, nawet nie wiem co to jest.
komentarz 6 czerwca 2015 przez draghan VIP (106,230 p.)

No właśnie od tego jest "stdafx". Proponuję poszukać nieco informacji na ten temat w Sieci. ;)

Zrób sobie nowy projekt, wklej ten kod i powiedz, co się dzieje.

// Ta aplikacja wyznaczy tajny kod według twojego imienia lub jakiegoś wyrazu :)
//#include "stdafx.h"
#include <iostream>
#include <locale>
#include <cstdio>
//#include <windows.h>
#include <cstdlib>
//#include <conio.h>
#include <algorithm>
#include <iomanip>

using namespace std;

/*
    Moje wersje Sleep() i _getch() - u mnie w systemie nie ma tych funkcji
*/
void Sleep(int x)
{
    getchar();
}

void _getch()
{
    getchar();
}

void changecol(int numofcol)
{
/*    HANDLE Kolor;
    Kolor = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(Kolor, numofcol);*/
}

int polecenie;

int main()
{
//    SetConsoleTitleA("Kod Imienia Lub Wyrazu");

    setlocale(LC_ALL, "polish"); //Ustawienie polskich znaków

    cout << setprecision(1000);

    for (;;)
    {
        system("cls");

        polecenie = 0;

        changecol(3);
        cout << "                Ten program wyznaczy tajny kod dla twojego imienia!" << endl;
        changecol(15);
        cout << "======================================MENU======================================";
        changecol(10);
        cout << "1. Start Programu" << endl;
        cout << "2. Zasada działania" << endl;
        cout << "3. Zamknij program" << endl;
        changecol(15);
        cout << "================================================================================";
        cout << "                         Wpisz numer polecenia: ";
        cin >> polecenie;

        if (polecenie == 1)
        {
            const int tabD = 27;
            char tab[tabD] = { ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

            changecol(10);
            system("cls");
            cout << "===========================Wpisz swoje imię lub wyraz===========================";

            string imie;
            cout << endl << endl << endl;

            cin.ignore();
            getline(cin, imie);

            int dlugosc = imie.length();

            if (dlugosc > 20)
            {
                changecol(4);
                cout << "Twój wyraz: " << "ma " << dlugosc << "/20 znaków. Niestety trzeba zamknąć program :(";
                Sleep(5000);
                exit(0);
            }
            else
            {

                transform(imie.begin(), imie.end(), imie.begin(), ::toupper);
                int i3;
                int i2;
                long double liczba[20];
                int razy;

                cout << endl << endl;

                for (razy = 0; razy < 40; razy++)
                {
                    liczba[razy] = 50;
                }

                for (i2 = 0; i2 < dlugosc; i2++)
                {
                    for (i3 = 0; i3 < tabD; i3++)
                    {
                        if (imie[i2] == tab[i3]) liczba[i2] = i3;
                    }
                }
                for (int i6 = 0; i6 < dlugosc; i6++)
                {
                    if (liczba[i6] == 50)
                    {
                        changecol(4);
                        cout << "No, w konsoli trudno jest zamienić polskie znaki na zwykłe, więc lepiej wpisz" << endl << "bez polskich znaków" << endl << endl << "Niestety trzeba wyłączyć program, bo napotkał krytyczny błąd";
                        cout << endl << endl << "Dane wyjściowe: "; changecol(4); cout << imie;
                        Sleep(7000);
                        exit(0);
                    }
                }
                cout << "Wprowadzony wyraz: " << imie << endl << endl << "Naciśnij dowolny klawisz, aby obliczyć kod..." << endl;
                _getch();

                long double mnoznik = 0.1;

                for (int i7 = 0; i7 < dlugosc; i7++)
                {
                    mnoznik = mnoznik * 10;
                    liczba[i7] = liczba[i7] * mnoznik;
                    cout << liczba[i7] << endl;
                }
                long double kod; //Od tąd zaczyna się to co dodałem
                for (int skl = dlugosc; skl < 20; skl++)
                {
                    liczba[skl] = 0;
                }
                kod = liczba[0] + liczba[1] + liczba[2] + liczba[3] + liczba[4] + liczba[5] + liczba[6] + liczba[7] + liczba[8] + liczba[9] + liczba[10] + liczba[11] + liczba[12] + liczba[13] + liczba[14] + liczba[15] + liczba[16] + liczba[17] + liczba[18] + liczba[19];
                cout << kod; //A tu się kończy

                _getch();
            }
        }
        else if (polecenie == 2)
        {
            cout << "Narazie ten program nie działa :(";
            _getch();
        }
        else if (polecenie == 3)
        {
            changecol(7);
            system("cls");
            cout << "Zamykanie...";
            Sleep(500);
            exit(0);
        }
        else if (cin.fail())
        {
            cout << "Ktoś tu chyba nie umie wpisać polecenia :(((";
            Sleep(2000);
            cin.clear();
            cin.sync();
            continue;
        }
        else
        {
            cout << "Ktoś tu chyba nie umie wpisać polecenia :(((";
            Sleep(2000);
        }
    }
    return(0);
}

 

komentarz 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
W Visual Studio trzeba stosować jakiś standard POIX i musi być _getch(); zamiast getch();
komentarz 6 czerwca 2015 przez draghan VIP (106,230 p.)
Standard POSIX jest standardem zaprojektowanym dla systemu UNIX. Proszę Cię, zrób o co prosiłem wyżej.
0 głosów
odpowiedź 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
edycja 6 czerwca 2015 przez DavidMCPolska

Może ktoś kto ma Windows 8.1 i Visual Studio 2013 to wklei ten kod i skompiluje, żeby sprawdzić czy tylko u mnie tak jest czy u wszystkich.

0 głosów
odpowiedź 6 czerwca 2015 przez DavidMCPolska Bywalec (2,770 p.)
UWAGA! Chyba wiem w czym jest problem, program w ogóle nie zapisuje do zmiennej imie, tego co wpisuje.

EDIT: gdy zrobie cout << imie; po wpisaniu do zmiennej to wyświetla napis który wpisałem

Podobne pytania

0 głosów
3 odpowiedzi 239 wizyt
pytanie zadane 10 maja 2015 w C i C++ przez fibonacci Użytkownik (720 p.)
0 głosów
2 odpowiedzi 269 wizyt
pytanie zadane 15 listopada 2020 w C i C++ przez MrCrow Nowicjusz (120 p.)
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 15 stycznia 2020 w C i C++ przez xZenit Użytkownik (760 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...