arrays auffüllen verständnisfrage

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
chris_1981_
Beiträge: 72
Registriert: Sa Jun 15, 2013 8:41 pm

arrays auffüllen verständnisfrage

Beitrag von chris_1981_ » Sa Feb 01, 2014 5:09 pm

Hallo zusammen,

Entschuldige bitte die Frage, aber ich habe damit ein Problem beim Verständnis.

Code: Alles auswählen


void main (int argc, char *argv)
{
int test, i ;

char info[80] ="";

char testchar[30]="qweghuztdflJdjdjsjdnxkh";

test=strlen(testchar);

for (i=0;i<=test;i++)
{
if ( i<=2 && i <= 4)
{
info= testchar[i];
}

}
printf("testinfo %s", Info);

}

Der Code soll aus meinem Verständnis die im if Statement definierten step die Charakters in die variable Info packen.
Das wird aber nicht so ausgeführt, es wird immer nur der letzte Charakter angezeigt. Mit pointer klappt das, warum aber nicht ohne.

Vielen dank.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: arrays auffüllen verständnisfrage

Beitrag von mfro » Sa Feb 01, 2014 6:18 pm

Ich kann mir nicht recht vorstellen, daß dein Compiler das klaglos gefressen hat.
Eigentlich müsste sich ein halbwegs aktueller Compiler weigern, daraus ein Programm zu machen, da ist (mindestens) ein recht grober Fehler drin.

Schau' Dir die Fehlermeldungen/Warnungen an, die der Compiler ausgespuckt hat, dann kommst Du bestimmt alleine drauf.


Tip: es geht um die Variable "info".
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

chris_1981_
Beiträge: 72
Registriert: Sa Jun 15, 2013 8:41 pm

Re: arrays auffüllen verständnisfrage

Beitrag von chris_1981_ » Sa Feb 01, 2014 6:31 pm

Hallo,

Danke, ja ich habe diesen Code aus dem Kopf aufgeschrieben,
weil es mir so wichtig war.

Du hast recht, der Compiler meckert. Wenn ich dem Charakter Info das mit gebe [0] oder [34] dann wird nur das letzte Zeichen ausgegeben.

Genau diese Verständnis fehlt mir.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: arrays auffüllen verständnisfrage

Beitrag von cloidnerux » Sa Feb 01, 2014 7:03 pm

Code: Alles auswählen

if ( i<=2 && i <= 4)
Dieser Ausdruck ist nicht hilfreich, dies wird so oder so nur Wahr, solange i<=2 ist, daher Redundant.
info= testchar;

"info" ist ein Array, "testchar" auch.
Auf testchar greifst du mit dem Indexoperator([]) zu, auf info nicht. Wieso?
Redundanz macht wiederholen unnötig.
quod erat expectandum

chris_1981_
Beiträge: 72
Registriert: Sa Jun 15, 2013 8:41 pm

Re: arrays auffüllen verständnisfrage

Beitrag von chris_1981_ » Sa Feb 01, 2014 8:36 pm

Hallo,

Sorry für die Redundanz!
Wenn ich den Code so umstelle:

Code: Alles auswählen


void main (int argc, char *argv)
{
int test, i ;

char info[80] ="";

char testchar[30]="qweghuztdflJdjdjsjdnxkh";

test=strlen(testchar);

for (i=0;i<=test;i++)
{
if ( i>=2 && i <= 4)
{
info[0]= testchar[i];
}

}
printf("testinfo %s", Info);

}

Dann wird nur der letzte Eintrag ausgegeben.
Hier fehlt mir Know how, wie mache ich das denn richtig?entschuldigt

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: arrays auffüllen verständnisfrage

Beitrag von cloidnerux » Sa Feb 01, 2014 8:48 pm

Dann wird nur der letzte Eintrag ausgegeben.
Weil das genau das ist, was du Programmiert hast:

Code: Alles auswählen

info[0]= testchar[i];
Der Indexoperator greift auf das Element mit der Nummer zu, die du Angegeben hast:

Code: Alles auswählen

array[0]
greift auf das 1-te Element zu(Index, 0, da es einen Abstand 0 vom ersten Element ist).

Code: Alles auswählen

array[10]
greift auf das 11 Element zu.

Was du nun hier machst ist folgendes:
Du Zählst eine Variable i von 0 bis strlen(testchar)-1 hoch und greifst dann auf

Code: Alles auswählen

testchar[i]
zu. Damit iterierst du durch jedes Element in dem Array.
Jedoch schreibst du die Zeichen in

Code: Alles auswählen

info[0]= testchar[i];
info[0]. Immer auf des selbe Element. Du änderst also immer die selbe Variable.
Was du aber erreichen willst ist die Zeichen nacheinander in dein Array zu schreiben.
Daher musst du auch den Index erhöhen.

Code: Alles auswählen

int a = 0, i;
char array1[10];
char array2[10];
for(i = 0; i < strlen(array1); i++)
{
    if(<Bedingung>)
    {
        array2[a] = array1[i];
        a++;                                //Inkrementiere den Index
    }
}
Redundanz macht wiederholen unnötig.
quod erat expectandum

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: arrays auffüllen verständnisfrage

Beitrag von mfro » Sa Feb 01, 2014 8:57 pm

chris_1981_ hat geschrieben:Hallo,

Sorry für die Redundanz!
Wenn ich den Code so umstelle:

Code: Alles auswählen


void main (int argc, char *argv)
{
int test, i ;

char info[80] ="";

char testchar[30]="qweghuztdflJdjdjsjdnxkh";

test=strlen(testchar);

for (i=0;i<=test;i++)
{
if ( i>=2 && i <= 4)
{
info[0]= testchar[i];
}

}
printf("testinfo %s", Info);

}

Dann wird nur der letzte Eintrag ausgegeben.
Hier fehlt mir Know how, wie mache ich das denn richtig?entschuldigt
Da gibt's nichts zu entschuldigen - jeder fängt mal an.

Das sieht schon sehr viel besser aus, bloß hier:

Code: Alles auswählen

info[0]= testchar[i];
(über-) schreibst Du immer dieselbe Stelle (dasselbe Feldelement). Ausgegeben wird anschließend nur der letzte Zustand. Was Du eigentlich willst, ist (wahrscheinlich) stattdessen hinten anhängen.
Das ist der wesentliche Fehler.

Die if-Abfrage sieht auch noch seltsam aus. Wenn Du tatsächlich nur die Feldelemente mit Index 2 bis 4 abfragen willst, warum beschränkst Du dann die Schleife nicht auf diesen Bereich und sparst dir die Abfrage?
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

chris_1981_
Beiträge: 72
Registriert: Sa Jun 15, 2013 8:41 pm

[gelöst] arrays auffüllen verständnisfrage

Beitrag von chris_1981_ » Sa Feb 01, 2014 10:38 pm

hallo zusammen,

Danke ich habe es verstanden.
Ich habe ja schon einiges probiert, aber irgendwie habe ich versucht das ganze anders anzugehen.
Mir war nicht klar, dass ich ein zusätzliches Integer benötige, für das Char array, was ich hochzählen muss.

Die If-Abfrage wird nicht nur die "einzige" Abfrage sein, es kommen noch mehrere rein.
Wenn ich fertig bin mit der Programmierung, stelle ich das hier mal gerne vor.

Im Moment habe ich noch nichts gutes, was es Wert wäre, hier zu zeigen!

Vielen, vielen Dank für die Unterstützen, hier wird man nicht nieder gemacht ! TOP! :!: :!: :D

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: arrays auffüllen verständnisfrage

Beitrag von Xin » Mo Feb 03, 2014 9:28 am

Moin Chris,
chris_1981_ hat geschrieben:Entschuldige bitte die Frage, aber ich habe damit ein Problem beim Verständnis.
Dazu hatten andere schon was geschrieben.

Ich möchte eigentlich nur noch eine Kleinigkeit hinzufügen, denn darüber wirst Du immer wieder stolpern.

Code: Alles auswählen

int test, i ;
char info[80] ="";
char testchar[30]="qweghuztdflJdjdjsjdnxkh";
info und testchar sind vom Datentyp char[], also Char-Array, also viele Chars. Wenn Du einen Buchstaben rausgreifst mit testchar, dann hast Du nur noch einen Buchstaben, denn Du auf ein Array zuweist.
Beispiel aus der Realität. In eine Lampe kann man drei Glühbirnen schrieben. Eine Lampe ist also eine Array von drei Glühbirnen. Nun nimmst Du aus der Flurlampe eine Glühbirne raus und willst Du sie ins Wohnzimmer schrauben, dann sagst Du Flurlampe[1] für die mittlere Birne (Indizes 0, 1 und 2) und weist ihr einen neun Platz in Wohnzimmerlampe zu.

Code: Alles auswählen

Wohzimmerlampe = Flurlampe[1].
Vom Datentyp ist die Aussage Lampe = Glühbirne, das passt nicht. Das würde bedeuten, Du nimmst die Wohnzimmerlampe von der Decke und hältst die Drähte an die Lampe. Das ist aber nicht gewollt. Du musst also angeben, wo Du die Lampe in die Wohnzimmerleuchte packen möchtest.

Code: Alles auswählen

Wohnzimmerlampe[ position ] = Flurlampe[ 1 ]
Hier wird die alte Glühlampe mit einer Kopie der Flurlampe überschrieben.
Naja, das wäre in der Realität wohl doch anders, da kann man Glühbirnen nicht duplizieren. :-D
Die Realität machen wir dann mal, wenn Du in C++ ankommst ("Move-Semantik"). ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten