0 Daumen
39 Aufrufe

Frage:

Wie kann sichergestellt werden, dass bei der Division in C-Sprachen, selbst wenn Dividend und Divisor als float deklariert sind, eine Dezimalstelle ausgegeben wird?


Code:

Ich bin gerade dabei, die Lesbarkeitsaufgabe aus dem CS50-Kurs zu lösen. Es soll ein Programm werden, das Buchstaben und Wörter zählt, um sie im Coleman-Liau-Index zu verwenden. Dazu möchte ich den Rückgabewert der Klasse, die die Buchstaben zählt, durch 100 dividieren. Um zu sehen, ob es funktioniert, gebe ich den Wert per printf aus. Wenn ich zum Beispiel den Wert 'Whatever' eingebe, sollte der Wert 0.08 ausgegeben werden. Aber stattdessen gibt es 0 aus.

Ich kann leider nicht den Fehler erkennen.

I#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

float compute_score(string text);

int main(void)
{

string text = get_string("Text: ");

float score = compute_score(text);

printf("%2.f", score);
}
float compute_score(string text)
{

float divider = 100.00;
float letter = 0;

for (int i = 0; i < strlen(text); i++)
{
    if ((text[i] >= 'a' && text[i] <= 'z') || (text[i] >= 'A' && text[i] <= 'Z'))
    {
        letter++;
    }

}
return letter / divider ;
}
Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Sicherstellen der Ausgabe einer Dezimalstelle bei Division in C-Sprachen

Bei der Arbeit mit Fließkommazahlen (float) in C und anderen C-basierten Sprachen wie C++ ist es wichtig, die Formatierung bei der Ausgabe über printf zu beachten, um sicherzustellen, dass die gewünschte Anzahl von Dezimalstellen angezeigt wird. Dafür gibt es spezifische Formatierungsoptionen innerhalb des printf-Funktionsaufrufs.

Im vorgegebenen Codeblock wurde versucht, den Wert einer Berechnung mit zwei Dezimalstellen auszugeben, allerdings wurde das Format %2.f dafür verwendet. Dieses Format sagt allerdings etwas anderes aus, als gewünscht: Es bedeutet, dass gesamt (mindestens) zwei Stellen vor dem Komma erscheinen sollen, ohne explizite Angabe von Nachkommastellen.

Korrektur des Formatierungsstrings

Um sicherzustellen, dass genau eine Dezimalstelle ausgegeben wird, sollte der Formatierungsstring in printf zu %.1f geändert werden. %.1f spezifiziert, dass genau eine Nachkommastelle angezeigt werden soll, unabhängig davon, wie viele Stellen sich vor dem Komma befinden.

Hier ist, wie der korrigierte printf-Aufruf aussehen sollte:

c
printf("%.1f\n", score);


Untersuchen des Codes

Um das beschriebene Problem des Nutzers nachzuvollziehen und eine Lösung bereitzustellen, ist es hilfreich, den gesamten Kontext des Programms zu betrachten. Im beschriebenen Szenario wird der compute_score Funktion ein Text übergeben, und diese Funktion zählt die Buchstaben und teilt durch 100. Der Fehler könnte auch darin liegen, dass durch Ganzzahlen geteilt wird oder bei der Handhabung von float. Doch im vorgestellten Code scheint dies korrekt behandelt worden zu sein – der Divisor divider wird als float mit 100.00 deklariert und sollte somit Fließkommadivision erzwingen.

Die Korrektur des printf-Aufrufs wie oben beschrieben sollte das Problem lösen, vorausgesetzt, dass die Berechnung in compute_score korrekt durchgeführt wird und letter tatsächlich Buchstaben im Text zählt. Wenn danach immer noch 0 anstelle von 0.1 oder anderen erwarteten Werten ausgegeben wird, könnte das Problem woanders liegen, beispielsweise in der Logik, wie letter inkrementiert wird oder wie der Text verarbeitet wird. Die Beschreibung und der bereitgestellte Code deuten jedoch hauptsächlich auf ein Formatierungsproblem in printf hin.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community