kde som spravil chybu?
Moderátori: psichac, Moderátori
-
- Okoloidúci
- Príspevky: 42
- Dátum registrácie: 10 Apr 2014, 17:29
kde som spravil chybu?
caute, mam program:
# include <stdio.h>
int main() {
char x;
int y, z;
y=0;
while(z!=5) {
x=getchar();
if (x=='+'){
y++;
}
if (x=='-'){
y--;
}
printf("%d\n", y);
}
return 0;
}
no a je taku problem ze ked stlacim napr + vypiseme ze:1
1
vypise proste 2krat jednotku za sebou a vobec nvm preco?
# include <stdio.h>
int main() {
char x;
int y, z;
y=0;
while(z!=5) {
x=getchar();
if (x=='+'){
y++;
}
if (x=='-'){
y--;
}
printf("%d\n", y);
}
return 0;
}
no a je taku problem ze ked stlacim napr + vypiseme ze:1
1
vypise proste 2krat jednotku za sebou a vobec nvm preco?
0
-
- Pokročilý člen
- Príspevky: 752
- Dátum registrácie: 24 Jún 2010, 00:00
- Bydlisko: Trnava
- Vek: 68
Re: kde som spravil chybu?
V programe nie je chyba, ale niektoré špeciálne klávesy ako napr. šípky, Home, .. generujú dva znaky 0x00 a kód klávesy.Neviem isto, ale si stláčal klávesu "+" na numerickej klávesnice?
Na overenie môjho tvrdenia prerob program tak, že nahradíš test na napr. 'A' a vyskúšaj.
Na overenie môjho tvrdenia prerob program tak, že nahradíš test na napr. 'A' a vyskúšaj.
0
S.K.
Re: kde som spravil chybu?
Kód: Vybrať všetko
# include <stdio.h>
int main() {
char x;
int y;
y = 0;
while(1) {
x = getchar();
if (x == '+'){
y++;
printf("%d\n", y);
}
else if (x == '-')
{
y--;
printf("%d\n", y);
}
}
return 0;
}
0
-
- Zaslúžilý člen
- Príspevky: 1106
- Dátum registrácie: 03 Máj 2013, 16:18
- Bydlisko: Up there in the sky
Re: kde som spravil chybu?
Kód: Vybrať všetko
# include <stdio.h>
# include<conio.h>
int main(void)
{
char x;
int y=0,
z;
while(z!=5){
x=getch();
if(x=='+')
y++;
if (x=='-')
y--;
printf("%d\n", y);
}
return 0;
}
Kód: Vybrať všetko
#include<stdio.h>
int main()
{
char x;
int y, z; // 'z' nema zmysel !
y=0; //mozes priradit hodnotu aj hned: int y=0;
while(z!=5){
x=getchar();
if (x=='\053'){ //kuk ASCII
y++;
continue;
}
if (x=='\055'){ //kuk ASCII
y--;
continue;
}
printf("%d\n", y);
}
return 0;
}
0
“Strong people don't put others down... They lift them up.“ Michal P. Watson.
„Pravda musí čelit více zkoumajícím pohledům !"
„We cannot choose our external circumstances, but we can always choose how we respond to them'' Epiktetos
„Pravda musí čelit více zkoumajícím pohledům !"
„We cannot choose our external circumstances, but we can always choose how we respond to them'' Epiktetos
-
- Okoloidúci
- Príspevky: 42
- Dátum registrácie: 10 Apr 2014, 17:29
Re: kde som spravil chybu?
Dakujem uz to funguje
Vlastne tam stacilo dat to continue. Ale co mi to vlastne sposobilo to continue ze to uz teraz zrazu ide? V com bola pred tym chyba?
Vlastne tam stacilo dat to continue. Ale co mi to vlastne sposobilo to continue ze to uz teraz zrazu ide? V com bola pred tym chyba?
0
-
- Zaslúžilý člen
- Príspevky: 1106
- Dátum registrácie: 03 Máj 2013, 16:18
- Bydlisko: Up there in the sky
Re: kde som spravil chybu?
Uklada ti aj stlacene '\n' (enter, ktorym tu hodnotu potvrdzujes.) Kedze '\n' nieje +/-, tak program prebehne obidva if bez splnenej podmienky a vytlaci vysledok znovu, ktory je rovnaky - kedze sa premenna ani nezvacsovala a ani nezmensovala.
Preto musis bud pouzit iny tvar citania znaku, aby cital len jeden /* x=getch(), printf("%c\n",&x) */ ... alebo to neak inak osetrit.
Napriklad:
alebo dalsich vela moznosti. To continue; je interacny prikaz, ktory skace na koniec najvnutornejsej smycky a nuti ju k opakovaniu.
Cize ked tam napises to '+' desat krat pri jednom citani znaku (naraz), tak ti desat krat prebehne cyklus s y++ a ked pride na znak, ktory nieje ani '+' ani '-' tak vytlaci vysledok - teda to nieje bohvieake riesenie.
Preto musis bud pouzit iny tvar citania znaku, aby cital len jeden /* x=getch(), printf("%c\n",&x) */ ... alebo to neak inak osetrit.
Napriklad:
Kód: Vybrať všetko
# include <stdio.h>
int main() {
char x;
int y, z;
y=0;
while(z!=5) {
x=getchar();
if (x=='+'){
y++;
}
if (x=='-'){
y--;
}
while(getchar()!='\n')
; //preskoci vsetky znaky stlacene do '\n' .
printf("%d\n", y);
}
return 0;
}
Cize ked tam napises to '+' desat krat pri jednom citani znaku (naraz), tak ti desat krat prebehne cyklus s y++ a ked pride na znak, ktory nieje ani '+' ani '-' tak vytlaci vysledok - teda to nieje bohvieake riesenie.
0
Naposledy upravil/-a Samanko v 06 Jan 2015, 14:00, upravené celkom 1 krát.
“Strong people don't put others down... They lift them up.“ Michal P. Watson.
„Pravda musí čelit více zkoumajícím pohledům !"
„We cannot choose our external circumstances, but we can always choose how we respond to them'' Epiktetos
„Pravda musí čelit více zkoumajícím pohledům !"
„We cannot choose our external circumstances, but we can always choose how we respond to them'' Epiktetos
-
- Okoloidúci
- Príspevky: 42
- Dátum registrácie: 10 Apr 2014, 17:29
Re: kde som spravil chybu?
a to je vlastnost getchar() ze mi uklada do premenej aj to \n?
A kedze program prebehne bez obidvoch splnenych podmienok tak by hodnota ktoru bude vypisovat mala byt stale 0 nie?
Ked sa nic nezvecsovalo ani nezmensovalo. Ale to hodnutu aj stale inkrementuje alebo dekrementuje a vypise dvakrat po stalceni + alebominus zakazdym.
Alebo je to tak ze najpr precita znak + alebo minus prvy krat to prebehne a druhy krat cita znak \n a to len vypise druhy krat?
A kedze program prebehne bez obidvoch splnenych podmienok tak by hodnota ktoru bude vypisovat mala byt stale 0 nie?
Ked sa nic nezvecsovalo ani nezmensovalo. Ale to hodnutu aj stale inkrementuje alebo dekrementuje a vypise dvakrat po stalceni + alebominus zakazdym.
Alebo je to tak ze najpr precita znak + alebo minus prvy krat to prebehne a druhy krat cita znak \n a to len vypise druhy krat?
0
-
- Pokročilý člen
- Príspevky: 752
- Dátum registrácie: 24 Jún 2010, 00:00
- Bydlisko: Trnava
- Vek: 68
Re: kde som spravil chybu?
getchar naozaj ukladá aj znak \n.
Ak to máš v C++.
Tak to uprav na:
alebo ak to máš v C:
Ak to máš v C++.
Tak to uprav na:
Kód: Vybrať všetko
char x;
int y;
y=0;
while(1)
{
cin >> x ;
if (x=='+')
y++;
if (x=='-')
y--;
printf("%d\n", y);
}
Kód: Vybrať všetko
char x;
int y,;
y=0;
while(1)
{
x= getch();
if (x=='+')
y++;
if (x=='-')
y--;
printf("%d\n", y);
}
0
S.K.
-
- Okoloidúci
- Príspevky: 42
- Dátum registrácie: 10 Apr 2014, 17:29
Re: kde som spravil chybu?
Mam to v cecku no ten prikaz getch() sa nachadza v conio.h kniznici pokial viem na linux tato kniznica nieje
0
-
- Zaslúžilý člen
- Príspevky: 1106
- Dátum registrácie: 03 Máj 2013, 16:18
- Bydlisko: Up there in the sky
Re: kde som spravil chybu?
getchar(); cita znaky do vstupneho bufferu az po znak '\n'. Potom z neho vezme prvy a ostatne ignoruje. Tie znaky vsak stale su vo vstupnom buffer-e, vyhodis ich/vyprazdnis ho napriklad tym
V tomto pripade by bolo pre teba zaujimavejsie pouzit getch();
Kód: Vybrať všetko
while(getchar()!='\n')
;
-tato je spravna.logarytmus napísal: Alebo je to tak ze najpr precita znak + alebo minus prvy krat to prebehne a druhy krat cita znak \n a to len vypise druhy krat?
V tomto pripade by bolo pre teba zaujimavejsie pouzit getch();
0
“Strong people don't put others down... They lift them up.“ Michal P. Watson.
„Pravda musí čelit více zkoumajícím pohledům !"
„We cannot choose our external circumstances, but we can always choose how we respond to them'' Epiktetos
„Pravda musí čelit více zkoumajícím pohledům !"
„We cannot choose our external circumstances, but we can always choose how we respond to them'' Epiktetos
-
- Okoloidúci
- Príspevky: 42
- Dátum registrácie: 10 Apr 2014, 17:29
Re: kde som spravil chybu?
Okej dakujem uz tomu chapem
getch() je v tom conio.h a ten nie je pre linux. Na ktorom robim ja.Nejaky ekvivalnet k tomu na linux nieje?
getch() je v tom conio.h a ten nie je pre linux. Na ktorom robim ja.Nejaky ekvivalnet k tomu na linux nieje?
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: kde som spravil chybu?
Obávam sa že nie. Tam sa veci majú trochu inak. Pravdepodobne chceš aby sa ti znak prečítal okamžite po stisnutí. Dá sa to tak, že sa terminál prepne do unbuffered režimu.
Tu máš príklad ako na to.
http://shtrom.ssji.net/skb/getc.html
Tu máš príklad ako na to.
http://shtrom.ssji.net/skb/getc.html
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok