IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
DoZby
Člen
Avatar
DoZby:24.3.2021 15:39

Ahoj, mám problém, že mi program vypisuje jiný výstup, než bych čekal a nevím proč to tak je. Po zadání písmena (ať už toho, které slovo obsahuje nebo ne) se mi doplní písmeno na řádek a poté místo toho, aby program čekal na zadání dalšího písmena vypíše: ** Zadej písmeno: -(pismeno)---** Správně by mi měl vypsat jen: Zadej písmeno a počkat až ho zadám, nic víc. Kvůli tomu mi blbne i počet pokusů, který vypisuje dvojnásobek čísel + 1 než by měl.

#include <stdio.h>
#include <string.h>

int main(void)
{
  /* Hadani slova */

  char str[] = "maslo"; /* hadane slovo */
  char delka[] = "-----";
  char pismeno;
  int count = 0; /* pocet hadani */

  do{
    printf("%s\n", delka);
    printf("Zadej pismeno: ");
    pismeno = getchar();

    for(int i=0; i<strlen(str); i++){
      if(pismeno == str[i]) delka[i] = pismeno;
    }
    count++;
  }while(strcmp(str, delka));

  printf("%s\n", delka);
  printf("Uhadli jste slovo, potrebovali jste %d pokusu", count/2+1);

  return 0;
}

Zkusil jsem: Zkoušel jsem dojít v čem je chyba, že jsem program přepsal do cyklu while, ale pořád jsem na tom byl stejně.

Chci docílit: Abych se zbavil řádku: **Zadej písmeno: -(pismeno)--(pismeno)-- ** a aby počet pokusů ukazoval správný počet.

Odpovědět
24.3.2021 15:39
Ztrácej svůj čas a čekej na zázrak
Avatar
DarkCoder
Člen
Avatar
Odpovídá na DoZby
DarkCoder:24.3.2021 16:49

Důvod, proč Ti program vypisuje nesprávný výstup je ten, že Ti ve vstupním bufferu kromě tebou zadaného znaku zůstává znak nového řádku (popřípadě další znaky, které se při další iteraci cyklu doplňují sami za tebe). Aby k tomu nedocházelo je třeba po čtení znaku vyprázdnit vstupní buffer.

Takže doplň za čtením znaku buď:

fseek(stdin, 0L, SEEK_END);

nebo jiný způsob, kde se pomocí cyklu vyprázdní vstupní buffer.

Pár rad na konec:

Nalezneš tam dost informací o tom jak to správně dělat.

  • Pokud vypisuješ pouze samotný řetězec a chceš odřádkovat, použij funkci puts() nikoli printf().
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
24.3.2021 16:49
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DoZby
Člen
Avatar
Odpovídá na DarkCoder
DoZby:24.3.2021 18:23

Díky, na vhodné pojmenovávání se taky podívám :-)

Nahoru Odpovědět
24.3.2021 18:23
Ztrácej svůj čas a čekej na zázrak
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.