"We are back" « oc.at

Hilfe bei proggi in C. Bitte schnell!

Sibs 06.03.2003 - 16:08 946 22
Posts

cbs2k1

Big d00d
Avatar
Registered: Sep 2002
Location: AT
Posts: 290
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.


Code:
#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
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
ich schreibs grad neu und dann poste ich es hier rein, ok?

cbs2k1

Big d00d
Avatar
Registered: Sep 2002
Location: AT
Posts: 290
Ja, is ok!
Danke!

Luki

UNDER CONSTRUCTION
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
Code:
#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
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Was auf den ersten Blick gleich nicht funzt ist :
Code:
[b]char v[n];[/b] // n muss ein konstanter Wert sein
Auf jedenfall dynamisch anlegen :
Code:
[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
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
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
Avatar
Registered: Sep 2002
Location: AT
Posts: 290
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
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
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
Avatar
Registered: Sep 2002
Location: AT
Posts: 290
jo, ähm das Problem besteht weiterhin.
Mir wär jede Hilfe recht!

cbs2k1

Big d00d
Avatar
Registered: Sep 2002
Location: AT
Posts: 290
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
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
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
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
wir reden von C also mit malloc speicher reservieren und nicht mit new ;)

so schwer ist das doch nicht. unter anderem verwende aber nicht scanf zum einlesen. buffer overflow lässt grüßen ;)

Luki

UNDER CONSTRUCTION
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
und ich dachte schon ich sei total verblödet und wir habens umständlich gelernt :)

cbs2k1

Big d00d
Avatar
Registered: Sep 2002
Location: AT
Posts: 290
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:
Code:
for(x=0;x<=y;x++)
					{
						if(z[i]==v[x])
						{
							break;
						}
					else{
							v[g]=z[i];
							g++;
						}
					}

Phobos

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
Zitat
Es soll wenn man aaceccggcegi eingibt und dann 5 drückt acegi ausgeben.

sry, für dumme bitte, wo is da ein system?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz