webForumDet fria alternativet

funktions fel (förbodligen lätt)

C/C++

12 svar · 260 visningar · startad av mikul

Medlem sedan aug. 20013 824 inlägg
Frågan#1

Tjenare.

jag började igår med att försöka lära mig...

om jag vill göra en funktion som ska innehålla både cin och cout...hur gör jag då???
detta funkade inte nämligen:

void addNumric ()
{
long intTal1, intTal2;
cout << "skriv in tal nummer 1: ";
cin >> intTal1
cout << "skriv in tal nummer 2: ";
cin >> intTal2;
}

har även testat med return:
return intTal1;
return intTal2;

/ Mikul

Medlem sedan maj 20021 466 inlägg
#2

Exakt vad fungerade inte? Posta också eventuellt felmeddelande.

Medlem sedan aug. 20013 824 inlägg
#3

så här ser felen ut:
z:\c__~1\test1.cpp: In function `void addNumric()':
z:\c__~1\test1.cpp:10: initializing non-const `bool &' with `void *' will use a temporary
C:\DEV-C_~1\Include\G__~1\iostream.h:217: in passing argument 1 of `istream::operator >>(bool &)'
z:\c__~1\test1.cpp:10: parse error before `<'

/ Mikul

Medlem sedan juni 200010 432 inlägg
#4

Felmesset ser skumt ut och frågan är om du inte bör posta hela koden.

Men förutom det så (rent programmeringstekniskt):

1. Du kan endast returnera ett "objekt" i taget. 
2. Du ska inte deklarera void om du vill returnera nåt
3. Du löser "ditt" problem smidigast med pekare som parametrar:
     
   3.1  deklarera två integers innan du anropar funktionen
   3.2  skicka med adresserna som parametrar i funktionsanropet
   3.3  I funktionen, ta dessa parametrar och peta in värdena i dem.
      3.3.1 Du deklarerar funktionen som void, du behöver inte returnera nåt.

Hur du kodar detta får du som hemläxa :e

Medlem sedan aug. 20013 824 inlägg
#5

om jag ska va ärlig fattade jag inte så mycket av va du sa...=)
jag började trotts allt i går...

så här ser min kod ut:

#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>

void addNumric () 
{ 
long intTal1, intTal2; 
cout << "skriv in tal nummer 1: "; 
cin >> intTal1 
cout << "skriv in tal nummer 2: "; 
cin >> intTal2; 
} 

int main()
{
   float intVal, intTal1, intTal2, summa, i = 1, inget = 0;

   while (i >= inget)
   {

      cout << "tryck 1 för att multiplisera" << endl;
      cout << "tryck 2 för att dividera" << endl;
      cout << "tryck 3 för att addera" << endl;
      cout << "tryck 4 för att subtrahera" << endl;

      cin >> intVal;

      if (intVal == 1)
      {
         addNumric();

         summa = intTal1 * intTal2;

             cout << setw(7) << intTal1;
             cout << " * ";
             cout << intTal2;
             cout << " = ";
             cout << summa;
             cout << endl;
       }
       else if (intVal == 2)
       {
          addNumric();
          summa = intTal1 / intTal2;

             cout << setw(7) << intTal1;
             cout << " / ";
             cout << intTal2;
             cout << " = ";
             cout << summa;
             cout << endl;
       }
       else if (intVal == 3)
       {
          addNumric();
          summa = intTal1 + intTal2;

             cout << setw(7) << intTal1;
             cout << " + ";
             cout << intTal2;
             cout << " = ";
             cout << summa;
             cout << endl;
       }
       else if (intVal == 4)
       {
          addNumric();
          summa = intTal1 - intTal2;

             cout << setw(7) << intTal1;
             cout << " - ";
             cout << intTal2;
             cout << " = ";
             cout << summa;
             cout << endl;
       }
   i++;
   }
cout << endl;
system("PAUSE");
return 0;
}
Medlem sedan aug. 20013 824 inlägg
#6

jag har pysslat med asp innan oxå...
och då är det bara att göra så här:
sub test()
'allt möjligt
end sub

call sub

finns det inte nåt sånt i c++???
så man kan spara en massa kod på ett ställe i koden och sedan anropa det på ett lätt sätt...??

/ Mikul

Medlem sedan okt. 20013 217 inlägg
#7

Kan det vara så enkelt att :

cin >> intTal1

Borde vara :

cin >> intTal1;
Medlem sedan aug. 20013 824 inlägg
#8

hahaha...fan va dum jag är...
MEN....den räknar helt fel...=(

/ Mikul

Medlem sedan maj 20021 466 inlägg
#9

Ändra float till int.

Ändra
void addNumric ()
{
long intTal1, intTal2;
till
void addNumric (int& intTal1, int& intTal2)
{

Ändra alla anrop från
addNumric();
till
addNumric(intTal1, intTal2);

Medlem sedan aug. 20013 824 inlägg
#10

tack så mycket...
nu funkar det...=)

/ Mikul

Medlem sedan juli 2002581 inlägg
#11

PeW skrev:

3. Du löser "ditt" problem smidigast med pekare som parametrar:

Nej!
Viva la reférense!

Medlem sedan juli 2002581 inlägg
#12

mikul skrev:

jag har pysslat med asp innan oxå...
och då är det bara att göra så här:
sub test()
'allt möjligt
end sub

call sub

finns det inte nåt sånt i c++???
så man kan spara en massa kod på ett ställe i koden och sedan anropa det på ett lätt sätt...??

C++ är mer av ett högnivå-språk med mer typ-tester etc.
Det har inte den "funktionen" som finns i ASP, Omicron mm.

Men om du prompt vill ha en sådan effekt så definierar du antingen ett makro eller lägger funktionens intruktioner i en egen fil som du sedan #inkluderar.

Medlem sedan aug. 20013 824 inlägg
#13

ok...tack

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)