Avatar billede virtualfriend Nybegynder
31. januar 2001 - 15:33 Der er 10 kommentarer og
1 løsning

Default kommer med.


Hvorfor printes defaulten hele tiden her?


int main(int argc, char* argv[])
{

int a, f=0,b=0;

while( ( a=cin.get() ) != \'d\') {

switch (a) {

case \'f\': f++;break;
case \'b\': b++;break;

default : cout<<\"Noget galt her\"<<endl;break;




}//end of switch..



}//end of while..

cout<<\"antal f\'er \"<<f<<\" antal b\'er \"<<b<<endl;


getch();

        return 0;
}

Fatter det ikke...
Avatar billede erikjacobsen Ekspert
31. januar 2001 - 16:01 #1
Måske du skal sige:

char a;

while (cin.get(a) && a!=\'d\') {
...
Avatar billede jpk Nybegynder
31. januar 2001 - 16:07 #2
Hvis du mener at fejlmeddelelsen kommer med hver gang du trykker <ENTER>, er det jo fordi at <ENTER> hverken er lig med \'f\' eller \'b\' og default så udføres...
Hvis du dog har trykket \'d\' før <ENTER> (fx \"ffbd\") vil meddelelsen ikke komme, da løkken jo kun kører til \'d\'!
Avatar billede ultik Nybegynder
31. januar 2001 - 22:54 #3
while( ( a=cin.get() ) != \'d\')

den er ABSOLUT forkert den linie....

det den gør, er :

a=cin.get()

først sætter den a til det der kommer ud af cin.get, og hvis den KAN det, hvilket den oftest kan, så  returnerer den parentes 1 ( true ), og så sammenligner du altså 1 med D......

det skal breake allerede der.......

den rigtige linie skal se sådan ud :

while (a = cin.get() && a==\'d\') {.......
Avatar billede ultik Nybegynder
31. januar 2001 - 22:56 #4
om det er char a; eller int a; er vel egentlig ligemeget, en char er jo bare et 8-bits integer......

den kan måske brokke sig over \'d\' sammenligninger så, det er rigtigt, så det er bedst at sætte den til char, så allokerer den heller ikke for meget unødig hukommelse........
Avatar billede ultik Nybegynder
31. januar 2001 - 23:00 #5
ved ikke præcis hvordan cin.get virker, så det er muligt at erikjacobsens while er mere rigtig, men i så fald skal den nok hedde :

while (cin.get(&a) && a!=\'d\') { ....

cin.get kan jo ikke ændre i a, hvis den ikke får adressen på den som argument....


Avatar billede virtualfriend Nybegynder
01. februar 2001 - 00:12 #6

Det er nøjagtigt det samme med en char.

Og den fra Ultik er helt vild, det er ikke
adressen den er ude efter.
Avatar billede soepro Nybegynder
01. februar 2001 - 08:34 #7
Det er noget vrøvl alt det ovenstående !!!

cin.get() giver dig det input du laver, tegn for tegn, dvs. indtaster du \'abcdefg\' og trykker ENTER så får du først a, siden b, siden c osv. Problemet med cin.get() er at den først giver dig en karakter når du (på et eller andet tidspunkt) trykker ENTER. Da du alligevel anvender getch() i bunden af programmet, vil jeg foreslå dig at ændre programmet sådan her:

#include <iostream.h>
#include <conio.h>
int main(int argc, char* argv[])
{
  int a, f=0,b=0;

  while( (a=getch()) != \'d\')
  {
    cout << \"Behandler \" << (char)a << endl;
    switch (a)
    {
      case \'f\': f++;break;
      case \'b\': b++;break;
      default : cout<<\"Noget galt her\"<<endl;break;
    }; //end of switch..
  }; //end of while..

  cout<<\"antal f\'er \"<<f<<\" antal b\'er \"<<b<<endl;
  getch();

  return 0;
} // Main

Programmet her virker under TC++ 3.0 og C++ Builder 4.0.
Avatar billede jpk Nybegynder
01. februar 2001 - 09:37 #8
=> soepro: Hvorfor mener du så, at det er så noget vrøvl, det jeg skriver?

(Desuden, ikke at det har noget med essensen her at gøre, men det er jo ikke sikkert, at det er et problem, at cin.get() først reagerer ved tryk på ENTER, det kunne jo være meningen...)
Avatar billede virtualfriend Nybegynder
01. februar 2001 - 19:18 #9

Soepro har ganske ret. Det virker fint nu og
defaulten kommer ikke med mere.
Men den (char)a hvad gør den???
Avatar billede stringbuffer Nybegynder
01. februar 2001 - 20:06 #10
den fortæller << operatoren at det er et tegn der skal skrives ud, ikke et tal. << operatoren er nemlig overloadet til at outputte tal så de fremstår som tal, og tegn så de fremstår som tegn på konsollen.
Avatar billede virtualfriend Nybegynder
01. februar 2001 - 20:38 #11

Okay, Tak Buffer..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester