Školní projekt v C++ - problém s entrem – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Školní projekt v C++ - problém s entrem – C / C++ – Fórum – Programujte.comŠkolní projekt v C++ - problém s entrem – C / C++ – Fórum – Programujte.com

 

Ondra
~ Anonymní uživatel
244 příspěvků
13. 10. 2014   #1
-
0
-

Dobrý večer, poradil by mi někdo s projektem do školy? Mám za úkol vypisovat postupně Fibonacciho posloupnost po zadání jakéhokoliv znaku kromě "n" (znak + enter pro odeslní ) nebo pouze po stisknutí klávasnice enter bez zadání znaku. Po zadání znaku "n" se program ukončí. Vše mi funguje jak má, kromě té části, která zařídí, aby po stisknutí klávesnice enter se provedlo to samé co po zadání znaku a enter. Jsem začátčník a fakt si nevím rady :/ dočetl jsem se něco o použití cin.het() >> "\n"; , ale nevím kde a jak to použít aby mi to fungovalo jak má :/ všem moc díky za rady :)

Ukázka zdrojového kódu:

#include <iostream>
#include<conio.h>

using namespace std;

int main()
{
    int a = 1, b = 1, c = 2, fib = 0;
    char znak;
    cout << "Fibonacciho posloupnost zacina cisly 1,1,2" << endl;
    cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
    cin >> znak;

        if((znak != 'n') & (cin.get() == '\n'))
        {
            fib = b + c;
            b = c;
            c = fib;
    cout << "Dalsi cislo Fibonacciho posloupnosti je:" << fixed << fib << endl;


    for (znak = 0; znak != 'n'; znak)

    {
        cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
        cin >> znak;

        if((znak != 'n') & (cin.get() == '\n'))
        {
            fib = b + c;
            b = c;
            c = fib;
        cout << "Dalsi cislo Fibonacciho posloupnosti je:" << fixed << fib << endl;
        }
        else
        {
        cout << endl;
        }
    }
        }
    return 0;
}
Nahlásit jako SPAM
IP: 2001:718:1001:69c:fdd3:55...–
KIIV
~ Moderátor
+43
God of flame
13. 10. 2014   #2
-
0
-

zaprve and se musi delat pomoci &&, jinak z toho muze vzniknout neco jinyho nez cekas (tady to nahodou fungovat i bude, ale drive ci pozdeji si na tom vymlatis zuby)

Taky by ses mohl mrknout na cyklus do { } while a vynechat tu duplicitni cast mimo ni..

A pokazde bys mel nacist jeden znak a otestovat jestli to neni n nebo \n (a pokud to neni \n tak nacist jeste jeden znak) - ne ze by to bylo uplne blbuvzdorny, ale bude to lepsi nez toto

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Ondra
~ Anonymní uživatel
244 příspěvků
14. 10. 2014   #3
-
0
-

Mohl by jste mi prosím zkusit naznačit jak by to mělo vypadat nebo jak tu podmínku použít? Zkusil jsem, ale pořád mi to dělá to samé nebo to co nechci :(

#include <iostream>
#include<conio.h>

using namespace std;

int main()
{
    int a = 1, b = 1, c = 2, fib = 0;
    char znak;
    cout << "Fibonacciho posloupnost zacina cisly 1,1,2" << endl;
    cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
    cin >> znak;

    do
    {
        if((znak != 'n') || (znak != '\n'))
        {
                fib = b + c;
                b = c;
                c = fib;
                cout << "Dalsi cislo Fibonacciho posloupnosti je:" << fixed << fib << endl;
                cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
                cin >> znak;
        }
        if(znak == '\n')
        {
                fib = b + c;
                b = c;
                c = fib;
                cout << "Dalsi cislo Fibonacciho posloupnosti je:" << fixed << fib << endl;
                cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
         
    }
    while(znak != 'n');

    return 0;
}
Nahlásit jako SPAM
IP: 2001:718:1001:69c:fdd3:55...–
KIIV
~ Moderátor
+43
God of flame
14. 10. 2014   #4
-
0
-

#3 Ondra
neco jako (ale netestoval sem funkcnost)


    do
    {
        cin >> znak;
        if (znak != 'n')
        {
                fib = b + c;
                b = c;
                c = fib;
                cout << "Dalsi cislo Fibonacciho posloupnosti je:" << fixed << fib << endl;
                cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
        }
        char dummy = znak;
        while (dummy != '\n') // nacteme vsechny znaky do konce radku... ale ve znaku nechame jen ten prvni
        {
                cin >> dummy;
        }
    }
    while(znak != 'n');
Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Ondra
~ Anonymní uživatel
244 příspěvků
14. 10. 2014   #5
-
0
-

Nějak na to pořád nemůžu přijít :( pořád dělám něco špatně :/ už mě nic nenapadá...

Nahlásit jako SPAM
IP: 2001:718:1001:69c:fdd3:55...–
KIIV
~ Moderátor
+43
God of flame
15. 10. 2014   #6
-
0
-

tak aspon popis, jak spatne... "neco nefunguje" neni popis problemu, to je jen konstatovani

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Ondra
~ Anonymní uživatel
244 příspěvků
15. 10. 2014   #7
-
0
-

Jakmile se program spustí, vypíše se pouze jedno fib. číslo a to když zadám znak. Na enter nereaguje a po zobrazení jednoho čísla už pak ani na znak :/

#include <iostream>
#include<conio.h>

using namespace std;

int main()
{
    int a = 1, b = 1, c = 2, fib = 0;
    char znak;
    cout << "Fibonacciho posloupnost zacina cisly 1,1,2" << endl;
    cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
    //cin >> znak;

    do
    {
        cin >> znak;
        if (znak != 'n')
        {
                fib = b + c;
                b = c;
                c = fib;
                cout << "Dalsi cislo Fibonacciho posloupnosti je:" << fixed << fib << endl;
                cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
        }
        char dummy = znak;
        while (dummy != '\n') // nacteme vsechny znaky do konce radku... ale ve znaku nechame jen ten prvni
        {
                cin >> dummy;
        }
    }
    while(znak != 'n');
    return 0;
}

Připojen obrázek.

Nahlásit jako SPAM
IP: 2001:718:1001:69c:fdd3:55...–
15. 10. 2014   #8
-
0
-

V cyklu do - while bych dělal toto:
1. Stanovil poslední číslo posloupnosti a vypsal ho
2. Vyprázdnil vstupní proud cin
3. Vyžádal volbu uživatele
4. Volbu uživatele vyhodnotil v ukončovací podmínce cyklu

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:85b0:e6...–
15. 10. 2014   #9
-
0
-

   

int main()
{
   int a = 1, b = 1, fib;
   char znak;

   cout << "Fibonacciho posloupnost zacina cisly 1,1,";
   do {
	  fib = a + b;
	  a = b;
	  b = fib;
	  cout << fib << endl;
	  cout << "Zobrazit dalsi? [cokoliv/n]" << endl;
	  cin >> znak;
	  cin.ignore();
   } while(znak != 'n');
   return 0;
}
Nahlásit jako SPAM
IP: 195.178.67.–
Ondra
~ Anonymní uživatel
244 příspěvků
15. 10. 2014   #10
-
0
-

Tenhle kod dělá přesně to co v tom první zdrojáku, tj. vypíše další fib. číslo po zadání jakéhokoli znaku kromě 'n', které ukončí program. Já potřebuju ještě k tomu aby se číslo zobrazilo i pouze po stisknutí klávesy enter bez nutnisti zadání znaku :/ a to mi právě nějak nejde a nevím si s tím pořád rady :(

Nahlásit jako SPAM
IP: 2001:718:1001:69c:fdd3:55...–
KIIV
~ Moderátor
+43
God of flame
15. 10. 2014   #11
-
+1
-
Zajímavé

#10 Ondra
to bude asi tim, ze cin >> znak nacita jen "viditelne" znaky a preskakuje vsechny bile znaky - jako treba enter...

A spravnou odpovedi je pouziti  cin.get(znak)

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
15. 10. 2014   #12
-
0
-

Možná by to šlo vyřešit pomocí cin.getline(). V načteném řádku otestovat, zda je první znak n.

hu

Nahlásit jako SPAM
IP: 193.86.81.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Školní projekt — založil Asimka

Školní projekt — založil Honza

Školní projekt v C — založil sputnikone

Školní projekt (Databáze) — založil Patrik Štěrba

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý