Zeichen erkenne mit Leertaste in C?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

statt scanf brauchst du gets(X) damit das Programm die Leerzeichen erkennt.

dann:

for(i = 0; i < 99; i++){

if(X[i] != 0){

z++

}

}

Was denn jetzt? C oder C++? o.O

Der Code an sich sieht eher nach C aus, aber cout und cin gibts nur in C++.

Aber selbst dann fehlt noch der include von iostream und entweder eine Namespace-using-Direktive oder aber der Präfix std::.

Ausserdem ergibt dein scanf-Aufruf nicht gerade viel Sinn (und das nicht nur, weil du effektiv einen char** anstelle eines char* übergibst)...

Da wäre eher scanf("%98s", X); zu verwenden.

Dann verwendest du noch eine Variable s, die nirgendwo deklariert wurde und selbst wenn an der Stelle X stehen würde, währe die Schleifenbedingung nur am Gegenteiltag korrekt.

Des weiteren wäre es für die Ermittelung der Länge eines C-Strings sinnvoller, die Funktion strlen zu verwenden, die im Header string.h deklariert ist.

Sirjb04 
Fragesteller
 04.11.2019, 12:41

Ich brauch niemanden der mir sagt was da nicht passt, ich brauch jemanden der mir ein Vorschlag schicken kann per Bild!!

0
Isendrak  04.11.2019, 12:47
@Sirjb04

Na dann, viel Spaß damit (und falls der Lehrer dich darum bittet, zu erklären, was genau der Code macht, vergiss das "Weglaufen und Verstecken" nicht):

#include <stdio.h>
int l(const char *s){
    int l=0;
    for(;s[l];++l);
    return l;
}
int main(){
    char s[99]={0};
    printf(":");
    scanf("%98s",s);
    printf("l(\"%s\")=%d\n",s,l(s));
}

P.S.: Das nächste mal mach deine Hausaufgaben aber selbst.

1
Isendrak  04.11.2019, 12:52
@priesterlein

Dann soller sich nen Screenshot machen. ^^

Oder aber: Ausdrucken, zum Nebenraum faxen, dort einscannen und per E-Mail wieder in Raum 1 senden. XD

4
priesterlein  04.11.2019, 12:56
@Isendrak

Ich hätte es ja noch etwas kryptischer geschrieben, das ist irgendwie noch zu lesbar und l für die länge zu einfach zu erkennen.

3
Sirjb04 
Fragesteller
 04.11.2019, 13:05
@Isendrak

Geht das auch mit meiner Vorgabe und du schaust was fehlt damit es funktioniert.

0
KarlRanseierIII  04.11.2019, 13:05
@Isendrak
int sl(const char *s){
    char *r=s;
    while(*r) ++r;
    return (r-s);
}


Ob ich beim return explizit casten sollte?

1
Isendrak  04.11.2019, 13:11
@priesterlein

Hrr, mit nem Haufen #defines und Bezeichnernamen wie _2w34h8? XD

#define cc const c
#define c char
#define i int
#define r return
#define p printf
#define s scanf
#include <stdio.h>
i _34de5frt(cc *_567h){i _67t8=0;for(;_567h[_67t8];++_67t8);r _67t8;}
i main(){c _897l[99]={0};p (":");s ("%98s",_897l);p ("%s:%d\n",_897l,_34de5frt(_897l));r 0;}
1
Isendrak  04.11.2019, 13:16
@Sirjb04
Geht das auch mit meiner Vorgabe

Wie sollte es? o.O

Dein Code ist zum Großteil völlig konfus und es ist noch nichtmal wirklich zu erkennen, ob du jetzt wirklich mit C oder C++ zugange bist.

Das wäre so, wie wenn du mit nem Brot zum Messerschleifer ankommst, damit er dir einen LKW-Reifen daraus grillt.

und du schaust was fehlt damit es funktioniert.

Das habe ich (zumindest zum größten Teil) bereits in meiner Antwort aufgelistet, die du mit "Ne, ich will ne Fertiglösung." kommentiert hast...

2
Sirjb04 
Fragesteller
 04.11.2019, 13:19
@Isendrak

Ja weil ich ich printf und scanf schon habe ich brauche die Codes zum einlesen

0
Isendrak  04.11.2019, 13:25
@Sirjb04
ich brauche die Codes zum einlesen

Um was von wo wohin einzulesen?

Ist es denn wirklich zu viel verlangt, dass jemand, der hier eine Frage stellt diese wenigstens verständlich formuliert? -.-

Ganz ehrlich, mein 4 jähriger Neffe bekommt das besser hin, auch wenn seine Formulierungen teilweise "Bei Fische, Futter!" lauten...

2
Isendrak  04.11.2019, 14:23
@KarlRanseierIII
Ob ich beim return explizit casten sollte?

Ne, ich mag die Syntax lieber gesalzen statt gezuckert. ^^

Und ansonsten gilt die gute alte polnische Handwerkerweisheit "Wenn funktioniert, dann funktioniert. Wo Problem?" XD

1
regex9  04.11.2019, 15:21
@Isendrak

Ich würde den Bildschirm eher mit einer Handykamera aus der Schräge heraus fotografieren.

1
Isendrak  04.11.2019, 15:40
@regex9

Genauer: Den nicht entspiegelten Bildschirm aus einem Winkel von mindestens 45° zur Senkrechten bei Stadionscheinwerfergegenlicht aus dem entsprechenden Gegenwinkel und das mit einer Handykamera, deren Megapixelzahl aus dem gleichen Grund dreistellig ist wie ein Zentiliter in Liter umgerechnet. ^^

1

Was soll denn s[i] sein und wieso soll die Schleife nur laufen, wenn dort das Endezeichen aktuell steht?

Wieso machst du z++ ohne z vorher einen Wert gegeben zu haben?

Wenn du scanf verwendest, solltest du die maximale Anzahl an einzugebenden Zeichen festlegen. Ohne diese Angabe wird sowieso nur ein Zeichen gelesen und das war es dann.

Sirjb04 
Fragesteller
 04.11.2019, 12:41

Ich brauch niemanden der mir sagt was da nicht passt, ich brauch jemanden der mir ein Vorschlag schicken kann per Bild!!

0
priesterlein  04.11.2019, 12:49
@Sirjb04

Achso, wieso schreibst Du das nicht in der Frage? Du willst also, dass andere deine Aufgabe erledigen. Na, das kann man doch formulieren, sollte nicht so schwer sein.

5