Wątek przeniesiony 2015-04-07 18:09 z Edukacja przez Ktos.

Kłopot z kodem do zliczania znaków - gdzie jest błąd?

0

To mój pierwszy temat na forum więc witam wszystkich. Chciałem napisać taki krótki programik: Ma on zliczać liczbę liter i cyfr wciśniętych na klawiaturze i wyświetlać ile ich było, ale po wciśnięciu cyfry 0 ma zerować licznik. Wszystko mi działa poza tym zerowaniem. Gdzie zrobiłem błąd?

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

main()
{
 int c, licz;

 c=getch();
 for(licz=1;;)
  {
   system("cls");
   printf("Liczba znak˘w: %d\n", licz);
   c=getch();
   if(c>0)
    ++licz;
   if(c==0)
    licz=0;
   }
// while(1);
}
0

http://www.asciitable.com/

I zobacz jaki kod ma 0.

2
0 != '0'
0

Jestem pod wrażeniem szybkości odpowiedzi:), dziękuję. Tak ma być:

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

main()
{
 int c, licz;

 c=getch();
 for(licz=1;;)
  {
   system("cls");
   printf("Liczba znak˘w: %d\n", licz);
   c=getch();
   if(c>0)
    ++licz;
   if(c=='0')
    licz=0;
   }
// while(1);
} 
0

Tak będzie lepiej:

if(c!='0') // albo c!=48
    ++licz;
else
    licz=0;
 
0

@some_ONE racze tak:

licz = c!='0'? licz+1 : 0;

Używanie magicznych liczb odpowiadającym kodom ascii to zły pomysł.

0

@some_ONE możesz mi napisać dlaczego z negacją będzie lepiej? Szczerze jestem ciekawy.
@spartanPAGE myślałem nad tym ale że jestem początkujący więc tak bardzo jeszcze nie zapędzam. I tez pytanie czemu tak?:)
Tak dla wyjaśnienia interesuje mnie programowanie procesorów. A jeśli ktoś ma pytanie czemu wybrałem C a nie asm, to odpowiadam. Moim zdaniem C jest bardziej uniwersalny a w asm masz listę rozkazów po podany typ procesora choć wiele z nich się pokrywa. Co prawda bez problemu są one dostępne na stronach producentów ale z angielskiego jestem cienki;).

0

Kluczowe jest tutaj else;
Ternary conditional operator to syntax sugar.

0

else rozumie a to Ternary conditional operator to syntax sugar. co to takiego?

0
?:

->

cond? on_true_val : on_false_val

gdzie

std::is_same<
    decltype(on_true_val), 
    decltype(on_false_val)
>::value == true

lub

std::is_convertible<
    decltype(on_true_val),
    decltype(on_false_val)
>::value == true

lub

std::is_convertible<
    decltype(on_false_val),
    decltype(on_true_val)
>::value == true

1 użytkowników online, w tym zalogowanych: 0, gości: 1