Hilfe bei proggi in C. Bitte schnell!

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/hilfe_bei_proggi_in_c_bitte_schnell_70119/page_1 - zur Vollversion wechseln!


cbs2k1 schrieb am 06.03.2003 um 16:08

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 schrieb am 06.03.2003 um 16:13

ich schreibs grad neu und dann poste ich es hier rein, ok?


cbs2k1 schrieb am 06.03.2003 um 16:15

Ja, is ok!
Danke!


Luki schrieb am 06.03.2003 um 16:38

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 schrieb am 06.03.2003 um 16:40

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


Luki schrieb am 06.03.2003 um 16:48

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 schrieb am 06.03.2003 um 16:49

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!


Vivo schrieb am 06.03.2003 um 16:52

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 schrieb am 06.03.2003 um 17:17

jo, ähm das Problem besteht weiterhin.
Mir wär jede Hilfe recht!


cbs2k1 schrieb am 06.03.2003 um 19:29

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 schrieb am 06.03.2003 um 19:34

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 schrieb am 06.03.2003 um 19:35

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 schrieb am 06.03.2003 um 19:38

und ich dachte schon ich sei total verblödet und wir habens umständlich gelernt :)


cbs2k1 schrieb am 06.03.2003 um 19:40

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 schrieb am 06.03.2003 um 19:42

Zitat
Es soll wenn man aaceccggcegi eingibt und dann 5 drückt acegi ausgeben.

sry, für dumme bitte, wo is da ein system?




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025