Random in C/ If abfrage von é,á, etc

Hallo erstmal =)

Ich programmiere seit ein paar monaten in C und wollte mal fragen, ob jemand weiß wie ich in C ( in C und nicht in C# oder C++, weil bei google habe ich nur für c++ oder c# anleitungen dafür gefunden -.-) eine Zufallsfunktion erstellt, oder ob es diese schon gibt, und wie der syntax davon ist.

Das ist zwar eine andere Baustelle, aber wenn jemand schonmal dabei ist eine antwort zu schreiben, würde ich gerne noch fragen, wie man mit einer if Konstruktion abfragt, ob ein element eines char-arrays é,É,è,È,á,Á,à,À,ó,etc enthält, und ob man jedes einzelne element überprüfen muss, oder ob das auch einfacher geht…hier ist ein beispiel, wie ich es bisher gemacht habe:

printf(„m%cnnliche form von ‚franz%csischsprachig‘:\n“, ae, oe);
scanf("%s", francophone);

if(( francophone[0] == 102) && ( francophone[1] == 114) && ( francophone[2] == 97) && ( francophone[3] == 110) && ( francophone[4] == 99) && ( francophone[5] == 111) && ( francophone[6] == 112) && ( francophone[7] == 104) && ( francophone[8] == 111) && ( francophone[9] == 110) && ( francophone[10] == 101))
{
printf(„Richtig!\n\n“);
vp++;
}
else
{
printf(„Falsch!\nRichtig ist ‚francophone‘!\a\n\n“);
vn++;
}

Hallo,

Ich programmiere seit ein paar monaten in C und wollte mal
fragen, ob jemand weiß wie ich in C ( in C und nicht in C#
oder C++, weil bei google habe ich nur für c++ oder c#
anleitungen dafür gefunden -.-) eine Zufallsfunktion erstellt,
oder ob es diese schon gibt, und wie der syntax davon ist.

Zunächst einmal kannst Du unter

http://de.wikipedia.org/wiki/Rekursiver_arithmetisch…

nachlesen, wie man (Pseudo)-Zufallszahlen generiert. Dann gibt es natürlich – je nach verwendeter Bibliothek – zahlreiche Implementierungen in C.

Bei der „glibc“ (frei verfügbare GNU C Library) gibt es gleich drei zur Auswahl:
http://www.gnu.org/s/libc/manual/html_node/Pseudo_00…

Ich würde an Deiner stelle eine davon nutzen, anstatt das selbst zu implementieren.

Das ist zwar eine andere Baustelle, aber wenn jemand schonmal
dabei ist eine antwort zu schreiben, würde ich gerne noch
fragen, wie man mit einer if Konstruktion abfragt, ob ein
element eines char-arrays é,É,è,È,á,Á,à,À,ó,etc enthält, und
ob man jedes einzelne element überprüfen muss, oder ob das
auch einfacher geht…

Zunächst einmal werden alle Zeichen abhängig von der jeweiligen Codierung als unterschiedliche Zahlen dargestellt. Dein C Prgoramm sieht nur die Zahlen, nie die eigentlichen Zeichen. Daher kann bei falscher Codierung auch kompletter Unfug herauskommen (siehe manche komische Website)

Du solltest daher Buchstaben selbst bei einfacher 8 Bit Codierung nicht als „char“ deklarierern, weil Du da z.B. schon bei Pseudozeichen wie EOF Probleme bekommen kannst.

Jetzt hängt es davon ab, ob irgendwelche Eigenschaften der Zeichen dafür geeignet sind, die Vergleichsopeartionen zu reduzieren.

Du könntest z.B. ausnutzen, dass Sonderzeichen i.d.R. höhere Werte in den Codetabellen haben, als andere Zeichen. D.h. du könntest erst einmal Testen, ob die Werte überhaupt im Sonderzeichenbereich liegen.

Erst wenn das der Fall ist, musst Du genauer hinschauen.

Dann gibt es natürlich auch die „switch“ Anweisung, die Vergleiche mit einzelnen Werten im Code eleganter wirken lassen:

http://home.fhtw-berlin.de/~junghans/cref/SYNTAX/swi…

Last not least ist das, was Du da machst, ein Standardproblem der Informatik, für das es vielfältige Lösungen gibt.

Stichworte für google wären „string search“ oder „string match“. Auch das Handbuch zu der von Dir verwendeten C-Bibliothek enthält sicher viele schöne Hinweise.

Gruß

Fritze

das die sonderzeichen höhere werte in der ascii tabellen haben, ist ja das problem, deswegen kann ich sie ja nicht in die if konstruktion einbauen=/

nicht böse sein, aber ich kanne mich noch nicht sooo dollm in dem Gebiet aus, es wäre also von vorteil, wenn die antworten einfach ausgedrückt wären=D

also wie mache ich das mit den umlauten (sind é und á überhaupt umlaute?)?

Lg Aaron

Hallo,

das die sonderzeichen höhere werte in der ascii tabellen
haben, ist ja das problem, deswegen kann ich sie ja nicht in
die if konstruktion einbauen=/

Wieso das denn nicht? Du sollst wie gesagt nicht nach den komischen Zeichen suchen, die u.U. nicht mal auf Deiner Tastatur zu finden sind, sondern nach Zahlen. Definiere die Zeichen nicht als char, sondern als int (obwohl auch char einfach nur Zahlen zwischen 0 und 254 sind).

Dann suchst Du Dir den höchsten Zeichenwert heraus, der kein Sonderzeichen in Deiner Tabelle ist.

Wenn Zeichen kein Sonderzeichen,
dann weitermachen.
Sonst
gucken, welches Sonderzeichen das ist.

Falls Du keine Tabelle hast, kannst Du ja als kleine Vorübung selbst eine erzeugen.

nicht böse sein, aber ich kanne mich noch nicht sooo dollm in
dem Gebiet aus, es wäre also von vorteil, wenn die antworten
einfach ausgedrückt wären=D

Was ist denn an dem Hinweis auf die Dokumentation unverständlich? Ich habe Dir sogar die Links in die Antwort gepostet, damit Du nicht erst die schreckliche Mühe des selbst googelns auf Dich nehmen musst.

Gruß

Fritze

Hallo,

das die sonderzeichen höhere werte in der ascii tabellen
haben,

In ASCII sind keine Zeichen mit Akzent drin.
Lies dir mal den Anfang hiervon durch: http://perlgeek.de/de/artikel/charsets-unicode
da werden die Feinheiten erklärt. (Der Rest ist über Perl, und für dich dann nicht mehr so interessant).

Grüße,
Moritz