satz in char satz [50] einlesen
satz in char satz [50] einlesen
Ich möchte das wenn man zB:
Was ist das?
eingibt das "Was" in satz [0] gespeichert wird
"ist" in satz [1] gespeichert wird
"das" in satz [2] gespeichert wird
und durch das ? die eingabe bende t wirdt.
ich bekomms aber nur so hin das das Buchstaben weise eingelesen wird was mir nicht hilft da das für die auswertung zu umständlich ist.
hat jemand nen Tipp/ geht das überhaupt?
Was ist das?
eingibt das "Was" in satz [0] gespeichert wird
"ist" in satz [1] gespeichert wird
"das" in satz [2] gespeichert wird
und durch das ? die eingabe bende t wirdt.
ich bekomms aber nur so hin das das Buchstaben weise eingelesen wird was mir nicht hilft da das für die auswertung zu umständlich ist.
hat jemand nen Tipp/ geht das überhaupt?
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: satz in char satz [50] einlesen
Also, das aufteilen bestimmt, das Beenden durch "?" weis ich im moment nicht.
Ich würde einen Kompletten Text über scanf/fgets oder sonstigem holen und dann auswerten.
Unter C++ mit der Klasse string zb. mit der Funktion substr.
Und Buchstaben weise kann man das auch ein wenig einfacher lösen:
Ich würde einen Kompletten Text über scanf/fgets oder sonstigem holen und dann auswerten.
Unter C++ mit der Klasse string zb. mit der Funktion substr.
Und Buchstaben weise kann man das auch ein wenig einfacher lösen:
Code: Alles auswählen
char* GetString(char abortChar)
{
char temp[100]; //musst du an deine Bedürfnisse anpassen
for(int i = 0; i < 100; i++)
{
temp[i] = getchar();
if(temp[i] == abortChar) break;
}
return &temp;
}
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: satz in char satz [50] einlesen
Also in char satz [50] wirst du es eh nicht speichern können 
So wie das jetzt verstanden hab möchtest du einen Satz einlesen, diesen dann in Wörter unterteilen.
(Du kannst maximal 50 Wörter speichern, aber..)
Um deine Wörter zu speichern brauchst du natürlich Speicher.
Diesen forderst du an, wenn du ein Wort gefunden hast. (per malloc)
Bevor du das tun kannst, musst du wissen, wie groß dein Wort ist.
Du gehst also in deinem String von einem ' ' (Leerzeichen) zum nächsten (dazwischen ist dein Wort).
Diese Größe an Speicher allokierst du.
Dann kopierst du dein Wort (du brauchst evtl einen Hilfszeiger auf den Wortanfang) in den frisch angeforderten Speicher.
Und dann geht es weiter, zum nächsten Wort oder bis ein ? oder das Ende des Strings kommt

So wie das jetzt verstanden hab möchtest du einen Satz einlesen, diesen dann in Wörter unterteilen.
Code: Alles auswählen
char *woerter[50];
Um deine Wörter zu speichern brauchst du natürlich Speicher.
Diesen forderst du an, wenn du ein Wort gefunden hast. (per malloc)
Bevor du das tun kannst, musst du wissen, wie groß dein Wort ist.
Du gehst also in deinem String von einem ' ' (Leerzeichen) zum nächsten (dazwischen ist dein Wort).
Diese Größe an Speicher allokierst du.
Code: Alles auswählen
woerter[WORTNUMMER] = (char*) malloc (WORTLAENGE);
Und dann geht es weiter, zum nächsten Wort oder bis ein ? oder das Ende des Strings kommt

Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: satz in char satz [50] einlesen
Allso ich hab das jetzt so gelöst:
Aber wenn ich das jetzt mit "Wie geht es dir?" ausprobiere wird am schluss nur "W" ausgegeben.
Warum?
mfg
Empire
Code: Alles auswählen
#include <stdio.h>
int s;
char wort1 [25], wort2 [25], wort3 [25], wort4 [25], wort5 [25], wort6 [25], wort7 [25], wort8 [25], wort9 [25], wort10 [25], wort11 [25], wort12 [25], wort13 [25], wort14 [25], wort15 [25], wort16 [25], wort17 [25], wort18 [25], wort19 [25], wort20 [25], wort21 [25], wort22 [25], wort23 [25], wort24 [25], wort25 [25];
int main ()
{
printf ("Geben sie ihre Frage ein:");
scanf ("%[^ ]", &wort1);
if (wort1=="?") goto auswerten;
scanf ("%[^ ]", &wort2);
if (wort2=="?") goto auswerten;
scanf ("%[^ ]", &wort3);
if (wort3=="?") goto auswerten;
scanf ("%[^ ]", &wort4);
if (wort4=="?") goto auswerten;
scanf ("%[^ ]", &wort5);
if (wort5=="?") goto auswerten;
scanf ("%[^ ]", &wort6);
if (wort6=="?") goto auswerten;
scanf ("%[^ ]", &wort7);
if (wort7=="?") goto auswerten;
scanf ("%[^ ]", &wort8);
if (wort8=="?") goto auswerten;
scanf ("%[^ ]", &wort9);
if (wort9=="?") goto auswerten;
scanf ("%[^ ]", &wort10);
if (wort10=="?") goto auswerten;
scanf ("%[^ ]", &wort11);
if (wort11=="?") goto auswerten;
scanf ("%[^ ]", &wort12);
if (wort12=="?") goto auswerten;
scanf ("%[^ ]", &wort13);
if (wort13=="?") goto auswerten;
scanf ("%[^ ]", &wort14);
if (wort14=="?") goto auswerten;
scanf ("%[^ ]", &wort15);
if (wort15=="?") goto auswerten;
scanf ("%[^ ]", &wort16);
if (wort16=="?") goto auswerten;
scanf ("%[^ ]", &wort17);
if (wort17=="?") goto auswerten;
scanf ("%[^ ]", &wort18);
if (wort18=="?") goto auswerten;
scanf ("%[^ ]", &wort19);
if (wort19=="?") goto auswerten;
scanf ("%[^ ]", &wort20);
if (wort20=="?") goto auswerten;
scanf ("%[^ ]", &wort21);
if (wort21=="?") goto auswerten;
scanf ("%[^ ]", &wort22);
if (wort22=="?") goto auswerten;
scanf ("%[^ ]", &wort23);
if (wort23=="?") goto auswerten;
scanf ("%[^ ]", &wort24);
if (wort24=="?") goto auswerten;
scanf ("%[^ ]", &wort25);
if (wort25=="?") goto auswerten;
auswerten:
printf (" %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c", wort1[0], wort2[0], wort3[0], wort4[0], wort5[0], wort6[0], wort7[0], wort8[0], wort9[0], wort10[0], wort11[0], wort12[0], wort13[0], wort14[0], wort15[0], wort16[0], wort17[0], wort18[0], wort19[0], wort20[0], wort21[0], wort22[0], wort23[0], wort24[0], wort25[0]);
return 0;
}
Warum?
mfg
Empire
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: satz in char satz [50] einlesen
*autsch*
Das ist kein guter Programmierstil.
Erstmal das goto: ist das wirklich nötig? -> NEIN (siehe FAQ (?) Eintrag).
Dann:
Warum benutzt du zig globale Variablen, wenn es auch mit einem Array gehen würde?
Einen kurzen Einblick siehst du in meinem vorhergehenden Post.
Pack das Ganze in eine Schleife, in der du prüfst, ob es sich um ein Wort handelt, wenn ja, dann forderst du dafür Speicher an und speicherst es, wenn nein und es ein ? ist, dann unterbrichst du die Schleife und gehst zu deinem Codeteil über, in dem du die Wörter auswertest.
Um nochmal auf mein Array vom vorherigen Post zurückzukommen:
Das hier ist ein Array aus 50 char*, also aus 50 char-Pointern, die alle auf einen char-String zeigen können.
In einem Charstring kannst du z.B. ein Wort speichern. (char String = Array aus chars, ein char = ein Buchstabe)
Das ist kein guter Programmierstil.
Erstmal das goto: ist das wirklich nötig? -> NEIN (siehe FAQ (?) Eintrag).
Dann:
Warum benutzt du zig globale Variablen, wenn es auch mit einem Array gehen würde?
Einen kurzen Einblick siehst du in meinem vorhergehenden Post.
Pack das Ganze in eine Schleife, in der du prüfst, ob es sich um ein Wort handelt, wenn ja, dann forderst du dafür Speicher an und speicherst es, wenn nein und es ein ? ist, dann unterbrichst du die Schleife und gehst zu deinem Codeteil über, in dem du die Wörter auswertest.
Um nochmal auf mein Array vom vorherigen Post zurückzukommen:
Code: Alles auswählen
char *woerter[50];
In einem Charstring kannst du z.B. ein Wort speichern. (char String = Array aus chars, ein char = ein Buchstabe)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: satz in char satz [50] einlesen
zu goto:
bei manchen sachen die ich proggramiert hab geht es nocht anderst (höchstens mit funktionen aber das wär mir da zum ständlich)
auserdem hab ich so meine Prb mit schleifen (versuchs bitte net mir jetzt beizubringen)
Da ich schon viel mit goto gearbeitet habe und NIE prob damit gehabt
aber das is nebensache
ok ich versuchs mal auf deine weise auch wenn ich sie nicht im geringsten verstehe weil ich mit Zeigern noch nie gearbeitet habe
trotzdem würde ich gerne wissen warum meine version nicht funkt.
mfg
Empire
bei manchen sachen die ich proggramiert hab geht es nocht anderst (höchstens mit funktionen aber das wär mir da zum ständlich)
auserdem hab ich so meine Prb mit schleifen (versuchs bitte net mir jetzt beizubringen)
Da ich schon viel mit goto gearbeitet habe und NIE prob damit gehabt
aber das is nebensache
ok ich versuchs mal auf deine weise auch wenn ich sie nicht im geringsten verstehe weil ich mit Zeigern noch nie gearbeitet habe
trotzdem würde ich gerne wissen warum meine version nicht funkt.
mfg
Empire
Re: satz in char satz [50] einlesen
Wie kann ich wenn ich eine varieable hab zB:
char bsp [6] = "Hallo";
ich hab nur geschaft den 1. buchstaben auszugeben (allso auf einmal)
mfg
Empire
char bsp [6] = "Hallo";
ich hab nur geschaft den 1. buchstaben auszugeben (allso auf einmal)
mfg
Empire
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: satz in char satz [50] einlesen
Da steht im Endeffekt: "Gib von jedem "wort" das erste Char aus"Code: Alles auswählen
printf (" %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c", wort1[0], wort2[0], wort3[0], wort4[0], wort5[0], wort6[0], wort7[0], wort8[0], wort9[0], wort10[0], wort11[0], wort12[0], wort13[0], wort14[0], wort15[0], wort16[0], wort17[0], wort18[0], wort19[0], wort20[0], wort21[0], wort22[0], wort23[0], wort24[0], wort25[0]);
%c im printf steht für char, also ein einzelnes Zeichen.
Um einen String auszugeben musst du %s verwenden.
Dann stimmt die Angabe wort[0] aber nicht, denn diese Angabe würde ja auf das erste Char verweisen.
In dem Fall brauchst du dann glaube ich nur wortX (oder du versuchst es mit &wortX)
*Kopf schüttel*zu goto:
bei manchen sachen die ich proggramiert hab geht es nocht anderst (höchstens mit funktionen aber das wär mir da zum ständlich)
auserdem hab ich so meine Prb mit schleifen (versuchs bitte net mir jetzt beizubringen)
Da ich schon viel mit goto gearbeitet habe und NIE prob damit gehabt
aber das is nebensache
*Wo ist Xin? Du erklärst das immer so schön*

Was an deinem Code oben sofort auffällt: Du benutzt keine Funktionen. Schreibst du aber in C/C++/ASM/Java/(...) und benutzt keine Funktionen (wo sie sinnvoll sind), dann ist das wie Autofahren ohne Motor: Sehr mühsam.
Genauso mit Schleifen: Wie lange hat es gedauert, diesen Code oben zu schreiben? Mit einer Schleife (!) könnte man den Code auf deutlich weniger als die Hälfte reduzieren, und er wäre sogar noch schneller (da kann dein Compiler evtl was für dich tun). Lies dir doch am besten den Wiki-Artikel zu Schleifen durch und mach damit ein paar Übungen. Und frag dann, wenn du Probleme hast.
GOTO ist wirklich ein Relikt, ich wage sogar zu behaupten, das GOTO wohl (hoffentlich) mal aus dem Sprachgebrauch verschwindet...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: satz in char satz [50] einlesen
Hmm... okay... Dein Code enthält eine Dinge, die für einen C-Einsteiger absolut tabu sind. Das wäre das Goto.Empire hat geschrieben:Allso ich hab das jetzt so gelöst:
Dann wäre da noch die Sache, die für C-Programmierer, egal ob Profi oder Einsteiger, tabu sind. Das wäre das scanf.
Eine Sünde ist es, Variablen durchzunummerieren.
UNd wenn man das alles rausnimmt, dann sieht der Code so aus:
Code: Alles auswählen
#include <stdio.h>
int s;
int main ()
{
printf ("Geben sie ihre Frage ein:");
return 0;
}

Zur Eingabe verwende bitte Systemfunktionen, also beispielsweise Ncurses unter Linux. C bietet Dir ansonsten keine wirklich brauchbaren Eingabemöglichkeiten.
Zu den durchgezählten Variablen: Nimm ein Array: char ** worte;
Der Code ist nicht wartbar, damit nicht weiterentwickelbar, nicht wiederverwendbar, schlecht lesbar und abgesehen davon ungefähr fünfmal größer als die Lösung des Problems, welches er nicht löst.Dirty Oerti hat geschrieben:*Kopf schüttel*zu goto:
bei manchen sachen die ich proggramiert hab geht es nocht anderst (höchstens mit funktionen aber das wär mir da zum ständlich)
auserdem hab ich so meine Prb mit schleifen (versuchs bitte net mir jetzt beizubringen)
Da ich schon viel mit goto gearbeitet habe und NIE prob damit gehabt
aber das is nebensache
*Wo ist Xin? Du erklärst das immer so schön*
Gotos stecken überall. Man kann sie in C unstrukturiert nutzen (goto) oder strukturiert: (while, for, if, Funktionsaufrufe).Dirty Oerti hat geschrieben:Ich glaube nicht, dass du Sachen programmierst, die ohne ein GOTO nicht möglich werden. Ein GOTO kann man eigentlich IMMER durch Funktionen oder sinnvolleren Programmablauf ersetzen.
Schneller wäre er vermutlich nicht, eher langsamer, aber dafür fehleranfälliger.Dirty Oerti hat geschrieben:und er wäre sogar noch schneller (da kann dein Compiler evtl was für dich tun).
Und da gilt es Prioritäten zu setzen: Lieber ein Problem geringfügig langsamer gelöst, als ein eine schnelle fehlerhafte Antwort.
Zumindest als Schlüsselwort 'goto'.Dirty Oerti hat geschrieben:GOTO ist wirklich ein Relikt, ich wage sogar zu behaupten, das GOTO wohl (hoffentlich) mal aus dem Sprachgebrauch verschwindet...
Wozu brauchst Du die Aufteilung in Worte?
Wie sieht es damit aus, den Satz komplett einzulesen und dann z.B. strtok zu verwenden?
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: satz in char satz [50] einlesen
Ich will dass das progg auf fragen antwortet!
Dazu muss das progg den satz auf schlüsselworte durch suchen.
Wer jetzt versucht mir das auszureden/ seine metohde auf drehen will / oder mich auslachen will kann sich das sparen.
Hab ich schon alles gehört.
Danke!
(nur zur vorsorge(ich habs langsam sat))
mfg
Empire
Dazu muss das progg den satz auf schlüsselworte durch suchen.
Wer jetzt versucht mir das auszureden/ seine metohde auf drehen will / oder mich auslachen will kann sich das sparen.
Hab ich schon alles gehört.
Danke!
(nur zur vorsorge(ich habs langsam sat))
mfg
Empire