Problem mit Funktion

Hey Leute, hab hier folgenden Quellcode geschrieben:

#include 

int tausch(int x, int y)
{
 int z=0;
 z=x;
 x=y;
 y=z;
 return x,y;
}

int main()
{
 int x,y;
 char t;
 printf("Geben sie eine Zahl x ein: ");
 scanf("%d",&x);
 printf("Geben sie eine Zahl y ein: ");
 scanf("%d",&y);
 printf("---------------------------------------\n");
 printf("Tauschen? (j/n) ");
 scanf("%c",&t);
 if(t='j')
 {
 tausch(x,y);
 } 
 printf(" x ist jetzt %d und y ist jetzt %d\n",x,y);
}

So und nun zum Problem. Der Compiler liest ohne weiteres x und y ein, aber wenns um die Tausch-Frage geht, gibt er mir die Frage aus und dann gibt er x und y aus … Warum liest der meine t-Variable nicht ein? Bin mit meinem Latein - respektive c - am Ende.

so long
Andy

Hallo,

So und nun zum Problem. Der Compiler liest ohne weiteres x und
y ein, aber wenns um die Tausch-Frage geht, gibt er mir die
Frage aus und dann gibt er x und y aus … Warum liest der
meine t-Variable nicht ein?

Weil du „call by value“ gemacht hast. Die Werte, die du deiner Funktion übergibst, werden beim Aufruf kopiert, und die Kopie überschreibst. Beim zurückkehren wird die Änderung verworfen.

Du kannst entweder per Referenz aufrufen (nur C++) oder per Zeiger (C und C++).
Per Referenz:

void tausche(int& x, int& y){
...
}

Per Zeiger:

void tausche(int \*x, int \*y){
int tmp = \*x;
\*x = \*y;
\*y = tmp;
}

(ungetestet).

Grüße,
Moritz

Tja … klingt ja alles ganz plausibel was du mir da versuchst zu erklären, aber es funktioniert auch nicht … M.m.n. is das Problem nicht die Tauschfunktion, sondern dass er gar nicht in die Tauschfunktion rein geht … kann er ja gar nich, die char-Abfrage findet ja gar nicht statt! Das is das Problem

so long
Andy

Hi,

probier es mal mit

scanf("%c\n",&t);

Dann wartet die Eingabe, bis zum Drücken von Return.
(Das Problem, dass die Tausch-Funktion so bei Dir nicht funktionieren wird hast Du aber trotzdem noch, aber da hat Moritz sich ja schon ausgelassen.)

Gruß Yelmalio

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nochmals Hi,

ich hab mir den Quelltext nochmals zu Gemüte geführt und noch einen Logikfehler gefunden:

if(t='j')

müsste

if(t=='j')

heißen.
ich hab das Progrämmchen nochmal umgeschrieben, damit es funtioniert.

#include 
int tausch(int& x, int& y)
{
 int z=0;
 z=x;
 x=y;
 y=z;
 return x,y;
}

int \_tmain(int argc, \_TCHAR\* argv[])
{
 int x,y;
 char t[2];
 t[0]='j';
 while (t[0]=='j')
 {
 printf("Geben sie eine Zahl x ein: ");
 scanf("%d",&x);
 printf("Geben sie eine Zahl y ein: ");
 scanf("%d",&y);
 printf("---------------------------------------\n");
 printf("Tauschen? (j/n) ");
 scanf("%1s",&t);
 if(t[0]=='j')
 {
 tausch(x,y);
 } 
 printf(" x ist jetzt %d und y ist jetzt %d\n",x,y);
 printf("---------------------------------------\n");
 printf("noch einmal? (j/n)\n");
 scanf("%1s",&t);
 }
}

ich lege t nicht mehr als einzelnen Character an, sondern als Char-Array, aus dem ich aber nur das erste benutze.

Gruß Yelmalio

Hey Leute, hab hier folgenden Quellcode geschrieben:

#include

int tausch(int x, int y)
{
int z=0;
z=x;
x=y;
y=z;
return x,y;
}

int main()
{
int x,y;
char t;
printf(„Geben sie eine Zahl x ein: „);
scanf(“%d“,&x);
printf(„Geben sie eine Zahl y ein: „);
scanf(“%d“,&y);
printf("---------------------------------------\n");
printf(„Tauschen? (j/n) „);
scanf(“%c“,&t);
if(t=‚j‘)
{
tausch(x,y);
}
printf(" x ist jetzt %d und y ist jetzt %d\n",x,y);
}

So und nun zum Problem. Der Compiler liest ohne weiteres x und
y ein, aber wenns um die Tausch-Frage geht, gibt er mir die
Frage aus und dann gibt er x und y aus … Warum liest der
meine t-Variable nicht ein? Bin mit meinem Latein - respektive
c - am Ende.

so long
Andy

1 Like

Hallo Jesus,

Hey Leute, hab hier folgenden Quellcode geschrieben:

#include

So und nun zum Problem. Der Compiler liest ohne weiteres x und
y ein, aber wenns um die Tausch-Frage geht, gibt er mir die
Frage aus und dann gibt er x und y aus … Warum liest der
meine t-Variable nicht ein? Bin mit meinem Latein - respektive
c - am Ende.

Du musst ggf. stdin „reinigen“ , ==> fflush (stdin), siehe:

#include 

#define TAUSCHE(x, y) ((x)^=(y)^=(x)^=(y))

 int main()
{
 int x, y;
 char t;
 printf("Geben sie eine Zahl x ein: ");
 scanf("%d", &x);
 
 printf("Geben sie eine Zahl y ein: ");
 scanf("%d", &y);
 
 printf("---------------------------------------\nTauschen? (j/n)");
 **<u>fflush</u>(stdin)**;
 scanf("%c", &t);
 
 if( t == 'j' ) {
 TAUSCHE(x, y);
 } 
 
 printf(" x ist jetzt %d und y ist jetzt %d\n", x, y);
 return 0;
}

Grüße

CMБ

Alles klar danke jetzt funktionierts … Nur was ich nicht kapiert habe, wieso du die main so deklarierst:

int _tmain(int argc, _TCHAR* argv[])

da tuts

int main()

genauso

trotzdem sternschen *g*

so long
Andy