Hilfe bei proggi in C. Bitte schnell!
Sibs 06.03.2003 - 16:08 946 22
cbs2k1
Big d00d
|
Bitte lacht mich nicht aus, aber ich steck grad in folgendem Programm fest: Schreiben Sie ein Programm, das eine Zahl n und eine Folge a von Buchstaben einliest. Die ersten n verschiedenen Zeichen der Folge sollen ausgegeben werden. Sind nicht genügend verschiedene Zeichen vorhanden, so ist eine entsprechende Meldung auszugeben. #include <stdio.h>
void main(void)
{
char z[300];
int maxwert=13, i=0, x, a, y, n, g=1;
printf("\nBitte geben sie beliebig viele Zeichen!");
scanf("\n%s", &z);
printf("Bitte geben sie ein wieviele Zeichen ausgegeben werden sollen.");
scanf("%d", &y);
n=y;
char v[n];
if ((y>maxwert)||(y<0))
{
printf("Die Zahl ist größer als die Anzahl der eingegebennen Zahlen, oder kleiner als 0!");
}
maxwert=y;
v[0]=z[0];
for(i=0;i<=y;i++)
{
for(x=0;x<=y;x++)
{
if(z[i]==v[x])
{
break;
}
else{
v[g]=z[i];
g++;
}
}
}
printf("Die ersten %d Zeichen lauten: ", y);
for(i=0;i<=g;i++)
{
printf("%c", v[i]);
}
}
Es soll wenn man aaceccggcegi eingibt und dann 5 drückt acegi ausgeben. Ich weis, meine Fehler liegt bei den unteren if-else anweisungen, ich weis nur nicht wie ich das anders Formulieren soll?
|
Luki
UNDER CONSTRUCTION
|
ich schreibs grad neu und dann poste ich es hier rein, ok?
|
cbs2k1
Big d00d
|
Ja, is ok! Danke!
|
Luki
UNDER CONSTRUCTION
|
#include <stdio.h>
#define ARRLEN 300 // fügst halt ein was du willst
void main()
{
char str[ARRLEN];
int i=0,max=ARRLEN+1;
for(i=0;i<ARRLEN;i++);
str[i]='\0'; // initalisierung des strings
printf("Gib die Einzulesende Zeichenfolge ein:\n");
scanf("%s",&str);
printf("Bitte gib die Anzahl der Zeichen ein die du Einlesen willst:\n");
scanf("%d",&max);
for(i=0;(i<ARRLEN && str[i]!='\0')&&i!=max;i++)
printf("\nElement Nr.%d ist %c",i+1,str[i]);
if(i<ARRLEN && str[i]=='\0')
printf("\n\nERROR: Zuwening Zeichen vorhanden");
} // main
|
Vivo
Dreamworker
|
Was auf den ersten Blick gleich nicht funzt ist : [b]char v[n];[/b] // n muss ein konstanter Wert sein
Auf jedenfall dynamisch anlegen : [b]char * v = new char[n];[/b] //dynamisch angelegt
Was ich noch machen würde : vergib etwas mehrsagendere Variablennamen - Google : Ungarische Notation :: mehr will ich garnicht sagen will ja nicht luki's werk 0wnen :P Edit : args ... luki .. du musst das dynamisch anlegen
Bearbeitet von Vivo am 06.03.2003, 16:45
|
Luki
UNDER CONSTRUCTION
|
in pascal is a string auch nicht dyn. sondern hat std. mäßig 256 chars
wie schreibst du das dyn. an? so haben wir das nie gemacht...
|
cbs2k1
Big d00d
|
Thx Luki, das Problem ist nur, es funzt ned so richtig!? Wenn ich aaceccggcegi und dann 5 eingebe sollte er acegi ausgeben, er gibt aber aacec aus?
[edit] Thx auch dir ViVo!
Bearbeitet von cbs2k1 am 06.03.2003, 16:53
|
Vivo
Dreamworker
|
Stimmt ... kann man lassen ... Wennst es dynamisch anlegst könntest eben soviel Zeichen wie du willst eingeben ...
Aber ich würd trotzdem besser auf die Aufgabenstellung schaun : Er will die verschiedenen Zeichen ausgeben, und nicht die Folge der ersten Zeichen ...
|
cbs2k1
Big d00d
|
jo, ähm das Problem besteht weiterhin. Mir wär jede Hilfe recht!
|
cbs2k1
Big d00d
|
Kann mir bitte endlich mal jemand helfen???? Ich werd langsam narrisch mit dem blöden Programm! Ihr wissts doch e alle wie man des coded. Plz. helfts ma, sollte auch noch Ch lernen ):
|
Luki
UNDER CONSTRUCTION
|
sei mir nicht böse, aber du darfst nicht erwarten, das wir dir das fertig coden. wennst arge probs im fach c hast, dann frag deinen lehrer ob er dir evtl. helfen kann, denn fertige übungen helfen dir dabei nicht.
wenn ich noch zeit hab schau ich ob ich dir noch was schreiben kann, will aber nichts versprechen
|
xdfk
pädagogisch wertvoll
|
wir reden von C also mit malloc speicher reservieren und nicht mit new ![;)](/images/smilies/wink.gif) so schwer ist das doch nicht. unter anderem verwende aber nicht scanf zum einlesen. buffer overflow lässt grüßen
|
Luki
UNDER CONSTRUCTION
|
und ich dachte schon ich sei total verblödet und wir habens umständlich gelernt
|
cbs2k1
Big d00d
|
Ich verlang nicht, das ihr mirs fertigcoded, ich weis ja nur nicht, wie ich den Teil "umschreiben" soll, dass er nur das in den 2. string einliest, was er dann auch ausgeben soll, das ist meine einziges Problem edit: der Teil macht mich wahnsinnig: for(x=0;x<=y;x++)
{
if(z[i]==v[x])
{
break;
}
else{
v[g]=z[i];
g++;
}
}
|
Phobos
✝
|
Es soll wenn man aaceccggcegi eingibt und dann 5 drückt acegi ausgeben. sry, für dumme bitte, wo is da ein system?
|