myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Problem mit C Programm

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 01.12.10, 16:46   #1
durst99
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
durst99 ist noch neu hier! | 0 Respekt Punkte
Standard Problem mit C Programm

Hallo

Ich muss ein C Programm schreiben, welches einen String
( Zeichenkette 123456 )

In eine Integer Zahl umwandelt und ausgibt.

Ohne die itoa Funktion !

Mein Code schaut so aus, aber irgendwas scheint nicht zu funktionieren, da ein willkührliches Ergebnis herauskommt anstatt der zahl 123456.

Ich starte bei 0 und Zähle in jedem Durchgang den jeweiligen Inhalt vom String dazu , dann mal 10.

Also quasi :

zahl = (0+0x31) * 10 = 10
zahl = (10 + 0x32)*10 = 120
zahl = (120 + 0x33)*10 = 1230
.
.
.
zahl = (123450 + 0x36)*10 = 123456


Was stimmt am Code nicht ?

Code:
#include <stdio.h>


unsigned char zahl_als_text[7] = {'1','2','3','4','5','6','\0'};
unsigned int zahl;

int TextInZahlUmwandeln()
{
	
	
	unsigned int i;
	

	i=0;
	zahl=0;

	for (i=0;i<6;i++)
	{
		zahl = (zahl + zahl_als_text[i]);
		zahl = zahl*10;	
	}	
	
	return zahl;	
	
}


int main()

{

	TextInZahlUmwandeln(zahl);
	printf("TEXT %s ergibt umgewandelt in eine Zahl %i\n",zahl_als_text, zahl);


return 0;
}
Danke schonmal.
durst99 ist offline   Mit Zitat antworten
Ungelesen 01.12.10, 17:31   #2
PornoPenner
Banned
 
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
PornoPenner ist noch neu hier! | 0 Respekt Punkte
Standard

Wozu ein Rückgabewert, wenn Du eine globale Variable verwendest, die Du zusätzlich noch uninitialisiert übergibst, obwohl die Methode gar keinen Parameter benötigt?
PornoPenner ist offline   Mit Zitat antworten
Ungelesen 01.12.10, 18:01   #3
durst99
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
durst99 ist noch neu hier! | 0 Respekt Punkte
Standard

Naja die Struktur vom Funktionskopf wurde von unserem Lehrer schon vorgegeben, der Return Wert war schon drinnen.
Wie meinst du ?
durst99 ist offline   Mit Zitat antworten
Ungelesen 01.12.10, 18:24   #4
PornoPenner
Banned
 
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
PornoPenner ist noch neu hier! | 0 Respekt Punkte
Standard

Hmm, die Fehler, die man auf Anhieb sieht hab ich Dir ja erläutert.

Also, wenn Du nicht absolut ahnungslos bist, dann solltest Du Dein Problem beheben können. Zudem ist die Aufgabe auch nicht sonderlich schwer.

Ne Idee, warum die Methode einen Rückgabewert hat?
Was meinst Du?
PornoPenner ist offline   Mit Zitat antworten
Ungelesen 01.12.10, 19:25   #5
durst99
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
durst99 ist noch neu hier! | 0 Respekt Punkte
Standard

Muss mir die Sache nochmal durch den Kopf gehen lassen.
Danke schonmal für deine Denkanstöße
durst99 ist offline   Mit Zitat antworten
Ungelesen 01.12.10, 19:37   #6
durst99
Anfänger
 
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
durst99 ist noch neu hier! | 0 Respekt Punkte
Standard

Program läuft jetzt



Habe nun noch ein Problem.
Denke es liegt wieder an der Art der Variabel Deklaration.

Der Code soll einen String 123456 in einen Integer wandeln, und dann wieder zurück in einen String.
Funktioniert soweit auch alles, aber bei der Ausgabe habe ich ein Problem.

Schaut so aus : http://www.abload.de/image.php?img=unbenannt4h6m.jpg

Die Erste Zeile wo der String in TEXT gewandelt wird stimmt.
Und das Ergebnis der zweiten Zeile bei der Rückwandlung auch, aber er schreibt mir in der zweiten Zeile statt dem Int Wert der Variable "zahl" nur eine 0 hin.

Hier ist der Code :

Code:
#include <stdio.h>


unsigned int zahl;
unsigned char t[6];
unsigned char zahl_als_text[7] = {'1','2','3','4','5','6','\0'};



int TextInZahlUmwandeln()
{
   

    unsigned int i;
   

    i=0;
    zahl=0;

    for (i=0;i<6;i++)
    {
        zahl = zahl*10;   
        zahl = (zahl + zahl_als_text[i]-0x30);
       
    }   
   
    return zahl;   
}


void ZahlInTextUmwandeln()
{
   
    unsigned int h;
    int i;
    unsigned int anzahl_stellen;
   
    zahl = zahl;
    anzahl_stellen=6;
    t[6] = 0;
   

    for (i=anzahl_stellen-1; i>=0; i--)
    {
        h = zahl % 10;
        t[i] = h+'0';
        zahl = ( zahl - h )/10;
                                           
    }   
   
}


int main()

{
   
    TextInZahlUmwandeln();
    printf("TEXT %s ergibt umgewandelt in eine Zahl %i\n",zahl_als_text, zahl);

    ZahlInTextUmwandeln();
    printf("%i umgewandelt in einen TEXT ergibt: %s\n", zahl,t);
   
   


return 0;
}
Ich blicke bei den Funktionen nicht so richtig durch, deshalb hab ich die Variablen der Funktionen global definiert ... steckt da der Fehler dahinter ?
durst99 ist offline   Mit Zitat antworten
Ungelesen 02.12.10, 20:47   #7
flotti
Mitglied
 
Registriert seit: Mar 2009
Beiträge: 315
Bedankt: 21
flotti ist noch neu hier! | 0 Respekt Punkte
Standard

ja der fehler steckt definitiv dahinter, weil man sowas nicht bringen kann(alles global, void funktionen...)

versuch erst mal zu verstehen wie ne funktion funktinoiert und versuche dann weiter zu programmieren, sonst ist das sinnlos

ich hab die den ersten teil mal programmiert, den zweiten musst du aber selber machen

Code:
#include <stdio.h>

int TextInZahlUmwandeln(unsigned char *text) //  *text: zieger auf ein char alley => quasie ein string 
{
	unsigned int zahl = 0;
	while(*text)							//char arrays sind immer 0 terminiert, wenn der zeiger auf 0 zeigt endet die schleife, so ist die string länge wayne
	{
                zahl = zahl*10;   
                zahl = (zahl + *text-48);
		text++;							// den zeiger um ein feld weiter "schieben"  ...das letzte feld ist eine 0  
	}	
	return zahl;							// die rückgabe ist ein integer
}


int main()
{
	unsigned char zahl_als_text[7] = {'1','2','3','4','5','6'};
	int zahl_als_zahl = TextInZahlUmwandeln(&zahl_als_text[0]); // den wir hier einem anderen integer zuweisen 
																// &zahl_als_text[0]: zeiger auf erstes feld des arrays
	
	printf("TEXT %s ergibt umgewandelt in eine Zahl %i\n",zahl_als_text, zahl_als_zahl);

	return 0;
}
flotti ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 Uhr.


Sitemap

().