[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
C výpis cisle

Registrovaný: 15.07.13
Prihlásený: 27.05.18
Príspevky: 243
Témy: 42 | 42
NapísalOffline : 15.04.2017 11:09 | C výpis cisle

Dobrý deň,
neviem si s týmto zadaním rady
Zadanie:Napíšte program ktorý vypisuje prirodzené čísla od 1. Po každých desiatich číslach vypíše dotaz Mam pokračovať [A/N]? a podľa typu odpovedi skončí.
môj problém spočíva v tom že kde vypíše dotaz za 10 je tam raz ale keď dám a||A tak po 20 je tam už dva krát kde je zrada?
Kód:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c,v=1,i=0;
    while(1){
        while (i<=9){
            i++;
            printf("%d\n",v);
            v++;
                    }
            printf("Mam pokracovat? [A/N]\n");
            c=getchar();
            if(c=='a'|| c=='A'){
            i=0;
                               }
            else if (c=='n'|| c=='N'){
            exit(1);
                                    }
             }
        return 0;
}



_________________
PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB
HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa
NOTEBOOK:HP Elitebook 8460p
Tablet:Prestigio visconte Quad:
Mobil: Microsoft Lumia 640 Dual sim

Auto:Chevrolet camaro 1986 IROC-Z
Offline

Správca fóra
Správca fóra
C výpis cisle

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39 | 39
NapísalOffline : 15.04.2017 12:24 | C výpis cisle

Potrebuješ na to vážne cyklus v cykle?
Dvakrát ti to vypíše preto, že funkcia [c]getchar()[/c] načíta len jeden znak z vrcholu vstupného zásobníka (čím ho odstráni) a ostatné nechá tak ako sú.
Takže to znamená, že po spustení programu vypíšeš prvých desať číslic, vypíšeš otázku a čakáš na vstup od používateľa - ten zadá znak (akýkoľvek, dúfaš že je jeden - toto si skús ošetriť sám, aby keď zadáš "aaa" vypísalo len jednu dekádu číslic a nie tri) a enter, lenže zrada je v tom, že aj to je znak ako každý iný.
Preto tvoj [c]getchar()[/c] vyberie ten prvý "platný" znak, ale v zásobníku stále zostáva minimálne ešte ten enter - ten sa vyberie pri nasledujúcej iterácií a keďže to nemáš ošetrené, správa sa to takto.

Kód:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int i = 0; // iterator

    int stop = 10; // pomocna premenna
    int pokracuj = 1; // flag

    while (pokracuj == 1) {
        stop--;
        i++; // iterator zvysis o jedna
        printf("%d\n", i); // vypises cislo

        if (stop == 0) {
            printf("Mam pokracovat? [A/N]\n");
            int c = getchar();
            getchar(); // nacitas este "enter" - da sa pouzit aj scanf, najdi si o tom nieco
            // TODO: osetrit viac ako jeden zadany znak (..aaa, aan, an)

            if (c == 97 || c == 65) {
                // pokracujeme
                pokracuj = 1;
            } else if (c == 110 || c == 78) {
                // nepokracujeme
                pokracuj = 0;
            } else {
                printf("!!! neplatny znak\n");
                // nepokracujeme - chyba
                pokracuj = 0;
            }
            stop = 10; // reset pomocnej premennej
        }
    }
    return 0;
}


_________________
always is always wrong
Offline

Užívateľ
Užívateľ
C výpis cisle

Registrovaný: 15.07.13
Prihlásený: 27.05.18
Príspevky: 243
Témy: 42 | 42
Napísal autor témyOffline : 15.04.2017 12:58 | C výpis cisle

Aha pochopil som ďakujme pekne za pomoc


_________________
PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB
HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa
NOTEBOOK:HP Elitebook 8460p
Tablet:Prestigio visconte Quad:
Mobil: Microsoft Lumia 640 Dual sim

Auto:Chevrolet camaro 1986 IROC-Z
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 15.04.2017 13:00 | C výpis cisle

Ten enter tam ostáva vždy, takže stačí pridať naviac jedno volanie getchar() v prípade, že pokračujeme a hotovo. To jedno volanie naviac "zhltne" ten enter (nič viac nebude robiť, jednoducho ho zahodí) a program bude fungovať správne.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
 [ Príspevkov: 4 ] 


C výpis cisle



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Zistenie či cifry v čísle stupaju/klesaju

v Assembler, C, C++, Pascal, Java

6

466

09.02.2017 8:22

BX

V tomto fóre nie sú ďalšie neprečítané témy.

Vypis

v PHP, ASP

13

1053

26.06.2008 10:53

GoodWill

V tomto fóre nie sú ďalšie neprečítané témy.

Výpis zložky

v PHP, ASP

6

505

30.05.2012 20:04

xxx9955

V tomto fóre nie sú ďalšie neprečítané témy.

výpis zariadení

v Operačné systémy Microsoft

14

613

17.02.2016 21:06

bobino38

V tomto fóre nie sú ďalšie neprečítané témy.

vypis adresara

v PHP, ASP

3

638

16.12.2009 22:25

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

MySQL vypis

v Databázy

1

344

07.01.2014 15:34

kudzo3

V tomto fóre nie sú ďalšie neprečítané témy.

Stromový výpis

v Sieťové a internetové programy

0

450

19.02.2008 15:29

dsljohn

V tomto fóre nie sú ďalšie neprečítané témy.

zoradeny vypis

v PHP, ASP

1

359

02.05.2012 7:09

BX

V tomto fóre nie sú ďalšie neprečítané témy.

rozdvojený výpis?

v PHP, ASP

4

375

21.06.2014 9:16

MasterMatoSK

V tomto fóre nie sú ďalšie neprečítané témy.

výpis adresárov

v PHP, ASP

11

681

14.05.2008 21:52

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

percentualny vypis

v PHP, ASP

4

483

23.05.2010 21:53

rooobertek

V tomto fóre nie sú ďalšie neprečítané témy.

Výpis php

v PHP, ASP

11

621

14.04.2011 15:58

w3r0

V tomto fóre nie sú ďalšie neprečítané témy.

Vypis dni

v PHP, ASP

6

780

19.11.2010 13:30

emer

V tomto fóre nie sú ďalšie neprečítané témy.

vypis mailov

v Ostatné

3

504

27.08.2010 15:51

1987123

V tomto fóre nie sú ďalšie neprečítané témy.

MYSQL vypis podmienky

v Databázy

6

827

07.09.2010 20:15

camo

V tomto fóre nie sú ďalšie neprečítané témy.

Vypis DNS-ka

v Bezpečnosť a firewally

0

846

01.08.2009 12:00

ugo



© 2005 - 2024 PCforum, edited by JanoF