» Poradna » Programy

Program v C - Kde je chyba?

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 7/7
 |   |  Microsoft Windows 7 Opera 9.80  |  [194.213.60.---]

Dobrý den, napsal jsem následující program. Je to betaverze, ve výsledku to má fungovat podobně, jako hra šibenice. Tedy že jeden hráč zadá slovo a druhý jej bude po písmeně hádat s omezeným počtem pokusů. V současné fázi by měl program fungovat tak, že by měl vyzvat hráče 1, aby zadal slovo, dále příjde výpis hvězdiček, aby bylo vidět počet písmen a potom by měl mít hráč 2 jeden pokus na uhádnutí písmene. Pak se má program zastavit a vypsat na obrazovku tuto hvězd. kopii s jiš nahrazenými uhádnutými znaky. Bohužel, i když znak uhádnu, tak se vypíší zase jenom hvězdičky. V čem je prosím problém? Díky.#include <cstdlib>#include <iostream>#include <conio.h>#include <stdio.h>#include <math.h>using namespace std;int main(int argc, char *argv[]){ char slovo[12], kopie[12], pismeno; printf ("Hra Sibenice \n"); printf ("============ \n"); printf ("Pripravi se hrac 1. \n"); system("PAUSE"); printf ("Zadejte slovo. \n"); cin.get (slovo,12); strcpy(kopie,slovo); kopie[strlen(slovo)]='\0'; for (int i=0;i<strlen(slovo); ++i) kopie[i]='*'; system("CLS"); system("PAUSE"); printf ("%s\n",kopie); printf ("Připraví se druhy hrac. \n"); printf ("Zadejte pismeno. \n"); cin.get (pismeno); for (int j=0;j<strlen(slovo); ++j) if (pismeno=slovo[j]) pismeno=kopie[j]; system("PAUSE"); printf ("%s\n",kopie); system("PAUSE"); return EXIT_SUCCESS;

Odpovědi na otázku

 |   |  Microsoft Windows 7 Chrome 23.0.1271.97  |  [109.80.64.---]

Chybne je posledni podminkaif (pismeno=slovo[j]) pismeno=kopie[j];pri porovnavani se pouziva == a ne =, to je prirazeni.Spatne je i nasledne prirazeni, pokud je podminka splnena - prirazujes hvezdicku, ktera je v kopii do promenne pismeno, melo by to byt samozrejme naopak - kopie[j] = pismeno.Navic zkopirovani vlozeneho slova do promenne kopie:strcpy(kopie,slovo);je tam zbytecne, stejne to pak prepises o par radku niz hvezdickama

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80  |  [194.213.60.---]

Díky, toho jsem si měl všimnout...Upravil jsem tedy program podle vašich rad. Bohužel pořád reaguje stejně. Nenůže tu být ještě něco dalšího?#include <cstdlib>#include <iostream>#include <conio.h>#include <stdio.h>#include <math.h>using namespace std;int main(int argc, char *argv[]){ char slovo[12], kopie[12], pismeno; printf ("Hra Sibenice \n"); printf ("============ \n"); printf ("Pripravi se hrac 1. \n"); system("PAUSE"); printf ("Zadejte slovo. \n"); cin.get (slovo,12); kopie[strlen(slovo)]='\0'; for (int i=0;i<strlen(slovo); ++i) kopie[i]='*'; system("CLS"); system("PAUSE"); printf ("%s\n",kopie); printf ("Připraví se druhy hrac. \n"); printf ("Zadejte pismeno. \n"); cin.get (pismeno); for (int j=0;j<strlen(slovo); ++j) if (pismeno==slovo[j]) kopie[j]=pismeno; system("PAUSE"); printf ("%s\n",kopie); system("PAUSE"); return EXIT_SUCCESS;}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 23.0.1271.97

nefunguje to proto, ze Vam zustava konec radku na standardnim vstupu, takze cin.get(pismeno) nacte znak LF(\n). resit by to mohl cin.sync() pred cin.get(pismeno).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 23.0.1271.97

nefunguje to proto, ze Vam zustava konec radku na standardnim vstupu, takze cin.get(pismeno) nacte znak LF(\n). resit by to mohl cin.sync() pred cin.get(pismeno).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 17.0  |  [88.102.242.---]

Mohu se zeptat proč do C programu motáte C++?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80  |  [194.213.60.---]

Ve vývojovém prostředí Def-C++ jsem vytvořil C++ projekt, ale píšu v jazyce C. Bylo mi to doporučeno.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Firefox 17.0

Tohle ale není jazyk C, to je mix C a C++. Ve výsledku vytvoříte jen zabugovaného kočkopsa.#include <cstdlib> -- tohle je C++#include <iostream> -- tohle je C++using namespace std -- tohle je C++cin.get (slovo,12) => scanf("%[12]s", slovo) (nejsem si jistý)cin.get (pismeno) => pismeno=getchar()

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Betaverze, Slovo



Určitě si přečtěte


Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

17.  11.  2017 | Vojtěch Malý | 199

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

** I pod hranicí desíti tisíc korun existují dobře použitelné notebooky ** Mohou plnit roli pracovního stroje i zařízení pro zábavu ** Nejlevnější použitelný notebook koupíte za pět a půl tisíce

16.  11.  2017 | Stanislav Janů | 53