Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  c keeles väike probleem märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
.Eestlane.
HV kasutaja
.Eestlane.

liitunud: 14.01.2006




sõnum 19.06.2008 13:42:24 c keeles väike probleem vasta tsitaadiga

Miks selline lihtne koodijupp ei tööta?

char v;

do {
        printf("Kas soovid galerii (s)alvestada v6i  yhistada ning v2ljuda?");
        scanf("%c",&v);
} while (v!="s" || v!="t");
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 19.06.2008 13:45:13 vasta tsitaadiga

" != '

Ehk siis tee vahet char* ja char muutujatel icon_smile.gif

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
.Eestlane.
HV kasutaja
.Eestlane.

liitunud: 14.01.2006




sõnum 19.06.2008 13:52:52 vasta tsitaadiga

Aitäh.

EDIT: Uus küsimus.

Teine probleem on, et küsimus "Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?" esitatakse kaks korda järjest.
Lihtsutame koodi:
char v='a';

while (v!='s' && v!='t') {
   printf("Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?");
   scanf("%c",&v);
}

Ning käivitamisel näitab:
tsitaat:
Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
Nitro
HV kasutaja
Nitro

liitunud: 02.03.2004




sõnum 19.06.2008 14:08:30 vasta tsitaadiga

Näidatakse kaks korda, kuna v on juba võrdne a 'ga.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 19.06.2008 14:33:38 vasta tsitaadiga

Asi on selles, et kui sa trükid midagi siis satub input buffrisse see tähemärk (näiteks 'q') + enter ('\n'). Kuna tähemärk ei olnud 's' või 't' siis loop läheb edasi.
Aga uuesti küsimise asemel leiab scanf input buffrist sisestatud '\n' märgi ning loeb selle ning kasutajalt sisendit ei oodata. Ja loop läheb jälle edasi, kuid seekord on buffer tühi ja scanf() ja kasutajalt küsitakse sisendit.

Soovitan sisendi küsimisel kasutada fgets() funktsiooni või siis lugeda mõne muu funktsiooniga stdin-st kuni realõpuni ('\n').
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
.Eestlane.
HV kasutaja
.Eestlane.

liitunud: 14.01.2006




sõnum 19.06.2008 14:48:55 vasta tsitaadiga

Aitäh, troglodyte. Püüan natuke seedita su jutu sisu ning siis midagi ette võtta.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
1234567
HV vaatleja

liitunud: 05.11.2003




sõnum 19.06.2008 16:57:46 vasta tsitaadiga

Selline ei oleks mõttekam?

#include <conio.h>

char v;
while(v!=115 && v!=116){
       printf("Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?");
       fflush(stdin);
       v=getch();
}

Numbrid 115 ja 116 siis ASCII tabelist. Isegi enterit ei pea vajutama.
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
.Eestlane.
HV kasutaja
.Eestlane.

liitunud: 14.01.2006




sõnum 19.06.2008 17:04:16 vasta tsitaadiga

Aitäh, jätan meelde. Praegu polnud aega ega tähtsust, seega läksin lõpuks lihtsaimat teed pidi ja kasutasin inti.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
Urmet
HV vaatleja

liitunud: 29.07.2005




sõnum 19.06.2008 20:00:29 vasta tsitaadiga

1234567 kirjutas:
Numbrid 115 ja 116 siis ASCII tabelist. Isegi enterit ei pea vajutama.
mismoodi see on paremini loetav kood kui 's' ja 't'?? võlunumbrid on pahad, kasutagem siis vähemalt konstante

#define ASCII_T_T2HT 115
#define ASCII_S_T2HT 116

char v;
while(v!=ASCII_T_T2HT && v!=ASCII_S_T2HT){
       printf("Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?");
       fflush(stdin);
       v=getch();
}


aga siin jääb alles veel see probleem, et muutuja "v" on algväärtustamata ja võib vabalt olla nii 's' kui 't'..
Kommentaarid: 10 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 10
tagasi üles
vaata kasutaja infot saada privaatsõnum
1234567
HV vaatleja

liitunud: 05.11.2003




sõnum 20.06.2008 04:30:55 vasta tsitaadiga

Urmet kirjutas:
1234567 kirjutas:
Numbrid 115 ja 116 siis ASCII tabelist. Isegi enterit ei pea vajutama.
mismoodi see on paremini loetav kood kui 's' ja 't'?? võlunumbrid on pahad, kasutagem siis vähemalt konstante

#define ASCII_T_T2HT 115
#define ASCII_S_T2HT 116

char v;
while(v!=ASCII_T_T2HT && v!=ASCII_S_T2HT){
       printf("Kas soovid galerii (s)alvestada v6i (t)yhistada ning v2ljuda?");
       fflush(stdin);
       v=getch();
}


aga siin jääb alles veel see probleem, et muutuja "v" on algväärtustamata ja võib vabalt olla nii 's' kui 't'..

Ja mida need ascii konstandid nüüd teoreetiliselt muutsid?
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 20.06.2008 08:41:26 vasta tsitaadiga

Isiklik eelistus nii numbritele kui suurtele ja lohisevatele makrodele olek vastav char ise, ehk siis 's' või 't'. Oleks kohe aru saada, mida teha üritatakse. Sisuliselt arvuti jaoks on tõesti kama kaks mis kujul neid konstante esitatakse, lihtsalt veidi inimloetavam tundub endale.
_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 26.06.2008 17:20:41 vasta tsitaadiga

nice ... tdwtf material in progress.
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  c keeles väike probleem
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.