# Konvertierung von int in char



## natsu1000 (10. Mai 2007)

hi @ll.

hab mal wieder ein kleines Problem. Programmiere C++ in Visual Studio und will einen char und ein int vergleichen, deshalb dachte ich mir, wäre es das Beste, den int in ein char zu konvertieren, und dann mit strcmp() den vergleich durchzuführen. Nur leider funktioniert die Umwandlung bisher nicht .


int zahl;
...
cout<<zahl;
char buffer;

sprintf(buffer, "%d", zahl)
cout<<buffer;


ich bekomme immer die Fehlermeldung:
error c266: 'sprintf' : Konvertierung des Parameters 1 von char in char nicht möglich
Kann mir einer helfen, auch mit atoi funktiernierte es bisher nicht


----------



## pschilling (10. Mai 2007)

Hi,

sprintf verlangt ja auch einen String, sprich char-Array als erstes Argument. 

Du übergibst ihm aber ein char. Das ist ein ganz anderer Datentyp.

Aber wieso vergleichst du nicht einfach deinen int mit deinem char?

Ein char kannst du auch einfach nur als Zahlenwert sehen!


```
int i = 48;
char c = '0';
if( i == c ) { // Diese Bedingung ergibt TRUE !

}
```

Schönen Gruß,

Peter


----------



## natsu1000 (10. Mai 2007)

ich sollte mich vorallem mit Zeichenketten auseinandersetzten, da diese in einem Test in der Schule drankommen werden. Habe aber mitllerweile meinen fehler auch gefunden. ich muss den char buffer als Array anlegen, dann klappt das auch. Trotzdem danke für deine Hilfe.


----------



## natsu1000 (10. Mai 2007)

ok, funktioniert doch nicht so wie ich das will. Also ich habe ein char-Arry names Spielfeld[61][40] die ist global deklariert und gefüllt mit Spacetasten und "_" und "|" . Sie erzeugt ein optisches Spielfeld. in das Spielfeld sollen nun auch Zahlengeschrieben werden. Da das ein Sudoku-Spiel wird, will ich eine Abfrage starten, ob waagerechts schon diese Zahl eingetragen ist. Bin bisher soweit.


```
Spielfeld[waagerecht][senkrecht]
...
erstellte_zahl=4
char buffer[3000];

sprintf(buffer, "%d", zahl)
cout<<buffer;

for (int i=0;i<=39;i++)
{
     if (strcmp(buffer,Spielfeld[waagerecht][i]
           cout<<"Die Zahl ist noch nicht vergeben";
     else
           cout<<"Die Zahl ist noch nicht vergeben";
}
```

das Programm zeigt mir allerdings immer an, dass strcmp nicht 2 chars vergleichen kann.


----------



## deepthroat (10. Mai 2007)

Hi.

Wenn die Variable Spielfeld so definiert ist:
	
	
	



```
char Spielfeld[61][40];
```
Dann ist 
	
	
	



```
Spielfeld[x];
```
vom Typ "char [40]" und dann ist
	
	
	



```
Spielfeld[x][y];
```
vom Typ "char".

Wenn du dann 
	
	
	



```
strcmp(buffer, Spielfeld[x][y]);
```
schreibst kann das natürlich nicht funktionieren.

Du könntest z.B. schreiben:
	
	
	



```
strncmp(buffer, &Spielfeld[x][y], 1);
```
(Du solltest besser strncmp statt strcmp verwenden)

Übrigens, dein buffer ist ein bißchen überdimensioniert.

Gruß

PS: Verwende doch bitte die entsprechenden Code Tags für Quellcode den du postest. Wenn du den Quellcode nur einfach in den Post klatschst kann man das ziemlich schlecht lesen.


----------



## the_undertaker (11. Mai 2007)

deepthroat hat gesagt.:


> PS: Verwende doch bitte die entsprechenden Code Tags für Quellcode den du postest. Wenn du den Quellcode nur einfach in den Post klatschst kann man das ziemlich schlecht lesen.


 Mit anderen Worten: Schreib [ c p p ] Dein Code [ / c p p ] (ohne die Leerzeichen), um C++-Code zu schreiben.


----------



## natsu1000 (11. Mai 2007)

Zuerstma Danke, hatte echt nicht gewusst, das ich da irgendwelche Befehle eintippen muss um die besonderen Felder zu erzeugen.

Nun zu meinem Programm. Habe versucht das umzusetzten,

```
strcmp(buffer, &Spielfeld[waagerecht][i], 1)
```
ergibt aber leider eine Fehlermeldung: "keine Überladene Funktion akzeptiert 3 Argumente"

auch der zweite Hinweis


```
stmcmp(buffer, &Spielfeld[waagerecht][i], 1)
```

gibt mir eine Fehlermeldung, weil mir vermutlich ein Header fehlt : "Bezeichner auch mit Funktionsbezogener Suche nicht gefunden."


Bin was C++ betrifft noch ein noop und weiß nun echt nicht mehr weiter. Am besten ich poste mal das ganze Programm, warne aber gleich vor, es ist kaum dokumentiert, und, da es noch in der Testphase ist, sind funktionierende Programmteile Ausgeblendet um andere zu testen.
Also hier das Programm soweit.


```
// Sudoku.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "ctime"
#include "stdio.h"
#include "string.h"

using namespace std;


const int X=61, Y=40;
char Spielfeld[Y][X];




int irand (int min, int max)
{
	double r=max-min+1;
	return min+(int)(r*rand()/(RAND_MAX+1.0));
}



int prufen (int waagerecht,int senkrecht, int zahl)
{
	int help;
	char buffer[3000];
	sprintf(buffer,"%d",zahl);
		
	for(int i=0;i<=40;i++)
	{
		if (stmcmp(buffer, &Spielfeld[waagerecht][i], 1))
			return(1);
		else
			return (0);

    }
}


int kasten_errechnen_senkrecht (int Feld)
{
	switch(Feld)
		{
		case 1:
			Feld=3;
			break;
		case 2:
			Feld=7;
			break;
		case 3:
			Feld=11;
			break;
		case 4:
			Feld=16;
			break;
		case 5:
			Feld=20;
			break;
		case 6:
			Feld=24;
			break;
		case 7:
			Feld=29;
			break;
		case 8:
			Feld=33;
			break;
		case 9:
			Feld=37;
			break;
		}

		return (Feld);
}

int kasten_errechnen_waagerecht (int Feld)
{

		switch(Feld)
		{
		case 1:
			Feld=6;
			break;
		case 2:
			Feld=12;
			break;
		case 3:
			Feld=18;
			break;
		case 4:
			Feld=25;
			break;
		case 5:
			Feld=31;
			break;
		case 6:
			Feld=37;
			break;
		case 7:
			Feld=44;
			break;
		case 8:
			Feld=50;
			break;
		case 9:
			Feld=56;
			break;
		}

		return (Feld);
}

int schreiben_ins_Feld (int Zahl, int waagerecht, int senkrecht)
{

	switch(Zahl)
		{
		case 1:
			Spielfeld[senkrecht][waagerecht]= '1';
			break;
		case 2:
			Spielfeld[senkrecht][waagerecht]= '2';
			break;
		case 3:
			Spielfeld[senkrecht][waagerecht]= '3';
			break;
		case 4:
			Spielfeld[senkrecht][waagerecht]= '4';
			break;
		case 5:
			Spielfeld[senkrecht][waagerecht]= '5';
			break;
		case 6:
			Spielfeld[senkrecht][waagerecht]= '6';
			break;
		case 7:
			Spielfeld[senkrecht][waagerecht]= '7';
			break;
		case 8:
			Spielfeld[senkrecht][waagerecht]= '8';
			break;
		case 9:
			Spielfeld[senkrecht][waagerecht]= '9';
			break;
		}
		return (Zahl);
}



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

//vorher imagineres Erstellen des Spielbrettes
		

		for(int senkrecht=0;senkrecht<=Y;senkrecht++)
		{	
			
				for (int waagerecht=0;waagerecht<=X;waagerecht++)
				{
					if (waagerecht<=2)
					Spielfeld[(senkrecht)][waagerecht] =' ';
					else
					{	
						switch(senkrecht)
						{
						
						case 1:
						case 5:
						case 9:
						case 13:
						case 14:
						case 18:
						case 22:
						case 26:
						case 27:
						case 31:
						case 35:
						case 39:

							Spielfeld[senkrecht][waagerecht]= '_';
							break;

						case 2:
						case 3:
						case 4:
						case 6:
						case 7:
						case 8:
						case 10:
						case 11:
						case 12:
						case 15:
						case 16:
						case 17:
						case 19:
						case 20:
						case 21:
						case 23:
						case 24:
						case 25:
						case 28:
						case 29:
						case 30:
						case 32:
						case 33:
						case 34:
						case 36:
						case 37:
						case 38:
						    {
								if (waagerecht==3 || waagerecht==9|| waagerecht==15|| waagerecht==21 || waagerecht==22 ||waagerecht==28 || waagerecht==34 || waagerecht==40 ||waagerecht==41 || waagerecht==47 || waagerecht==53 || waagerecht==59|| waagerecht==60)
								Spielfeld[senkrecht][waagerecht]= '|';
								else
								Spielfeld[senkrecht][waagerecht] =' ';
							}
							break;
						case 0:
						case 40:
							Spielfeld[senkrecht][waagerecht]=' ';
							break;
						}
					}
											

						
                    
				}		
		}

	


	bool Schleifenende=true;
		
	do
	{
	
		int waagerecht, senkrecht;
		for(senkrecht=0;senkrecht<=Y;senkrecht++)
		{
			for(waagerecht=0;waagerecht<=X;waagerecht++)
				cout<<Spielfeld[senkrecht][waagerecht];			//Ausgabe des Spielfeldes

			cout<<endl;
				
		}

		//Computer erstellt 3 Zahlen (zwei als Feldkoordinate, eine für die Zahl
		int erstellte_zahl, zahl_waagerecht, zahl_senkrecht, max_zahl;

		srand((unsigned)time(NULL));
		
		cout<<"Wieviele Zahlen wollen Sie erstellen lassen?"<<endl;
		cin>>max_zahl;

		for (int i=0;i<=(max_zahl-1);i++)		
		{
			int help;
			zahl_waagerecht=irand(1,9);	//waagerecht Feldkoordinate
			erstellte_zahl=irand(1,9); // zu schreibende Zahl
			zahl_senkrecht=irand(1,9); //senkrechte Feldkoordinate 
			cout<<i<<"  zahl: "<<erstellte_zahl<<"   "<<"senkrecht: "<<zahl_senkrecht<<"   "<<"waagerecht: "<<zahl_waagerecht<<endl;
		
		zahl_waagerecht=kasten_errechnen_waagerecht(zahl_waagerecht);
		zahl_senkrecht=kasten_errechnen_senkrecht(zahl_senkrecht);


		//Prüfung
		help=prufen(zahl_waagerecht,zahl_senkrecht,erstellte_zahl);
		switch(help)
		{case 1:
			erstellte_zahl=schreiben_ins_Feld(erstellte_zahl,zahl_waagerecht,zahl_senkrecht);
			cout<<"Fall eins!";
			break;
		case 0:
			i=i-1;
			break;
		}
		}

		
	
		/*//Schreiben der Zahlen in die Felder
        cout<<"Eingabe der senkrechten Zahl"<<endl;	
		cin>>senkrecht;
		cout<<"Eingabe der waagerechten Zahl"<<endl;
		cin>>waagerecht;
		cout<<"Welche Zahl wollen Sie eingeben!";
		int zahl;
		cin>>zahl;
		max_zahl=zahl;
		senkrecht=kasten_errechnen_senkrecht(senkrecht);
		waagerecht=kasten_errechnen_waagerecht(waagerecht);*/
		
	
		
	
	}
	while (Schleifenende);



	getch();
}
```


----------



## SBX (11. Mai 2007)

natsu1000 hat gesagt.:
			
		

> Zuerstma Danke, hatte echt nicht gewusst, das ich da irgendwelche Befehle eintippen muss um die besonderen Felder zu erzeugen.
> 
> Nun zu meinem Programm. Habe versucht das umzusetzten,
> 
> ...



deepthroat empfiehl dir strncmp und nicht stmcmp. das hat nix mit einer header datei zu tun


----------

