Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
01.12.10, 16:46
|
#1
|
Anfänger
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
|
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.
|
|
|
01.12.10, 17:31
|
#2
|
Banned
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
|
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?
|
|
|
01.12.10, 18:01
|
#3
|
Anfänger
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
|
Naja die Struktur vom Funktionskopf wurde von unserem Lehrer schon vorgegeben, der Return Wert war schon drinnen.
Wie meinst du ?
|
|
|
01.12.10, 18:24
|
#4
|
Banned
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
|
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?
|
|
|
01.12.10, 19:25
|
#5
|
Anfänger
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
|
Muss mir die Sache nochmal durch den Kopf gehen lassen.
Danke schonmal für deine Denkanstöße
|
|
|
01.12.10, 19:37
|
#6
|
Anfänger
Registriert seit: Apr 2010
Beiträge: 5
Bedankt: 0
|
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 ?
|
|
|
02.12.10, 20:47
|
#7
|
Mitglied
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
|
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;
}
|
|
|
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
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr.
().
|