Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C - nejde načíst znak

Dělám jeden program do školy a potřebuju načíst nak z klávesnice ale pokaždé když program dojde do fáze kdy má načíst znak tak to přeskočí a pokračuje za načítáním, prostě nic nenačte. Zkoušel jsem to pomocí funkce getchar() i pomocí scnaf("%c", &x). Fakticky nevím co s tím, a nestalo se mi to porvé. Jestli někdo víte jak ten problém vyřešit, prosím poraďte.

Dělám v Code::Blocks ale to samé mi to děla i v Dev-C++.

Předmět Autor Datum
A jak jsem právě zjistil, v tom samem IDE jsem si jen na zkoušku udělal jednoduchy programek ktery j…
kongoušek 20.12.2011 22:40
kongoušek
jestli to pomuže, tohle ja zadani prikladu: Vytvořte program pro kalkulačku, a to takovou, která se…
kongoušek 20.12.2011 22:50
kongoušek
Když už kombinuješ scanf a getchar, tak za scanf musí být fflush(stdin); protože scanf si "pamatuje…
Niko Bellic 20.12.2011 22:51
Niko Bellic
grrr ... zas ma niekto predbehol ]:)
wam_Spider007 20.12.2011 22:53
wam_Spider007
skus dat pred to tvoje getchar prikaz: fflush (stdin);
wam_Spider007 20.12.2011 22:52
wam_Spider007
tak jsem to tam ale, ale je to takove divne, nekdy to jde, nekdy to nejde, proste ten program nedela…
kongoušek 20.12.2011 23:11
kongoušek
tady je kod toho programu, zkuste kdyztak podivat kde mam chybu pls #include <stdio.h> #include <st…
kongoušek 20.12.2011 23:18
kongoušek
ad 1) namiesto tych mastnych if-ov pouzi case ad 2) skus ten fflush dat pred kazdy scanf.
wam_Spider007 21.12.2011 21:17
wam_Spider007
Možná místo fflush by mělo stačit zapsat scanf(" %c",&znak); tedy přidat mezeru před znak charu. poslední
Hosting Banan.cz 24.12.2011 03:53
Hosting Banan.cz
Načítáš znak do proměnné op, kterou máš ale definovanou jako int.
Niko Bellic 21.12.2011 22:04
Niko Bellic
Jsem sice programátor začátečník ale naučil jsem se ukladat znaky do int podle jedne knihy, učili na…
kongoušek 22.12.2011 20:26
kongoušek
Jakou hodnotu asi pak má ta proměnná? Znak "+" to není ;-) #include <stdio.h> #include <stdlib.h> i…
ws79 22.12.2011 23:02
ws79
díky, ale nebylo to nutné, už mi to funguje. A funguje to i s INT. Znak se do proměnné ukládá pod je…
kongoušek 23.12.2011 14:46
kongoušek

A jak jsem právě zjistil, v tom samem IDE jsem si jen na zkoušku udělal jednoduchy programek ktery jenom nacte a vzpise znak a ono to najednou funguje. Ja uz tomu fakt nerozumim. Prvni se vykaslu na Turbo C++ protoze nedodržuje normu C99, tudíž nefunguje deklarace proměnných jinde než na začátku a u Code::Blocks zase tohle, jsem fakt zvedavy jak ten program dodelam.

jestli to pomuže, tohle ja zadani prikladu:

Vytvořte program pro kalkulačku, a to takovou, která se bude ptát na další operaci a číslo, a to dokud nebude zadána značka pro konec. Teprve poté se vypíše výsledek. Značka pro konec bude K nebo k. (Např. 5+5*5/2k=25)

vim ze je to lehke, taky myslim ze vim jak na to ale jestli se nemylim tak potrebuju nacist ty znaky.

Když už kombinuješ scanf a getchar, tak za scanf musí být fflush(stdin); protože scanf si "pamatuje stisknutý enter" a skočí ti to hned dál (formulace není přesná, jsem jen mírně pokročilý začátečník, ale tak nějak to je). A jinak doporučuji ze začátku dělat v Codelite.

tady je kod toho programu, zkuste kdyztak podivat kde mam chybu pls

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int op;
  float vysledek;
  float n;

  scanf("%f", &vysledek);

  do
  {
    fflush(stdin);

    scanf("%c", &op);

    if (op == 'k' || op == 'K')
      break;

    scanf("%f", &n);


    if (op == '+')
      vysledek += n;
    if (op == '-')
      vysledek -= n;
    if (op == '*')
      vysledek *= n;
    if (op == '/')
      vysledek /= n;
  } while (op != 'k' || op != 'K');

  printf("Vysledek: %f\n", vysledek);

  return 0;
}

Jakou hodnotu asi pak má ta proměnná? Znak "+" to není ;-)

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a;
  int b;
  char operace;
  float vysledek;
  int n = 0;

  	printf("Vloz cislo:");
	fflush(stdin);
	scanf("%d", &a);
	
	printf("Operace:");
	fflush(stdin);
	scanf("%c",&operace);

	printf("Vloz cislo:");
	fflush(stdin);
	scanf("%d", &b);

	if (operace == 43)
      vysledek = a + b;
    if (operace == 45)
      vysledek = a - b;
    if (operace == 42)
      vysledek = a * b;
    if (operace == 47)
      vysledek = a / b;

  while (n < 999999) {
  
 		printf("Operace:");
		fflush(stdin);
		scanf("%c",&operace);

	 if (operace == 107 || operace == 75)
     break;

		printf("Vloz cislo:");
		fflush(stdin);
		scanf("%d", &a);

    if (operace == 43)
      vysledek += a;
    if (operace == 45)
      vysledek -= a;
    if (operace == 42)
      vysledek *= a;
    if (operace == 47)
      vysledek /= a;

	++n;
  }

  printf("Vysledek: %f\n", vysledek);
  return 0;
}

Sice to není dokonalé, ale trochu to funguje :-). Vytvořeno v Visual Studio 2010.

Zpět do poradny Odpovědět na původní otázku Nahoru