Bestimmung von Ganzzahlen oder Fließkommazahlen in C

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir ein C-Programm schreiben, das erkennt, ob eine vom Benutzer eingegebene Zahl eine Ganzzahl oder eine Fließkommazahl ist. Dies ist ein grundlegendes Konzept in der Programmierung, bei dem verschiedene Datentypen unterschiedliche Speicheranforderungen und Verhaltensweisen haben.

Wir werden uns darauf konzentrieren, das Vorhandensein eines Dezimalpunkts in der Eingabe zu erkennen, um festzustellen, ob es sich um einen Fließkommawert handelt. In diesem Lab lernen Sie die grundlegende Zeichenkettenverarbeitung in C, die Verarbeitung von Benutzereingaben und die bedingte Logik kennen.

Am Ende dieses Labs werden Sie verstehen, wie Sie:

  • Benutzereingaben als Zeichenkette in C lesen
  • Nach bestimmten Zeichen innerhalb einer Zeichenkette suchen
  • Bedingte Logik verwenden, um Entscheidungen auf der Grundlage der Eingabe zu treffen

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FileHandlingGroup(["File Handling"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/variables("Variables") c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/ControlFlowGroup -.-> c/while_loop("While Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/FileHandlingGroup -.-> c/create_files("Create Files") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/operators -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/if_else -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/for_loop -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/while_loop -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/arrays -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/create_files -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/user_input -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} c/output -.-> lab-123267{{"Bestimmung von Ganzzahlen oder Fließkommazahlen in C"}} end

Erstellen und Öffnen der C-Programmdatei

Beginnen wir damit, eine neue C-Datei für unser Programm zu erstellen. Wir werden sie main.c nennen und sie im Projektverzeichnis platzieren.

  1. Stellen Sie zunächst sicher, dass Sie sich im Projektverzeichnis befinden:
cd ~/project
  1. Klicken Sie jetzt im WebIDE auf das Menü "File", wählen Sie "New File" aus und benennen Sie es main.c. Alternativ können Sie das Symbol "New File" in der Seitenleiste des Dateiexplorers verwenden.

  2. Der Dateieditor wird automatisch geöffnet. Fügen wir die erforderlichen Headerdateien zu unserem Programm hinzu:

#include <stdio.h>
#include <string.h>

Diese Headerdateien sind für unser Programm essentiell:

  • stdio.h stellt Funktionen für Standard-Eingabe- und -Ausgabeoperationen wie printf() und scanf() zur Verfügung.
  • string.h bietet Funktionen zur Zeichenkettenmanipulation. In diesem einfachen Programm werden wir es hauptsächlich zur Berechnung der Zeichenkettenlänge verwenden.

Beachten Sie, dass wir conio.h nicht wie im ursprünglichen Template erwähnt eingefügt haben. Dies liegt daran, dass conio.h keine Standard-C-Bibliothek ist und auf vielen Systemen, einschließlich unserer Ubuntu-Umgebung, nicht verfügbar ist.

Hinzufügen der Hauptfunktion und Deklarieren von Variablen

Nachdem wir nun unsere Headerdateien haben, fügen wir die main()-Funktion hinzu und deklarieren die Variablen, die wir für unser Programm benötigen.

Fügen Sie den folgenden Code in Ihre main.c-Datei ein:

int main() {
    char number[20];  // Array to store the input number as a string
    int flag = 0;     // Flag to track if a decimal point is found (0 = not found, 1 = found)
    int i;            // Loop counter variable

    // Program will continue here...

    return 0;
}

Lassen Sie uns diese Variablen verstehen:

  • number[20]: Dies ist ein Zeichenarray (Zeichenkette), das die Eingabe des Benutzers speichern wird. Wir haben die Größe auf 20 Zeichen erhöht, um größere Zahlen aufzunehmen.
  • flag: Diese Ganzzahlvariable fungiert als boolesche Flagge. Wenn wir einen Dezimalpunkt in der Eingabe finden, setzen wir diese auf 1.
  • i: Eine einfache Zählervariable für unsere Schleife.

Die main()-Funktion ist der Einstiegspunkt unseres C-Programms. Aller Code, den wir schreiben, wird innerhalb dieser Funktion liegen. Die Anweisung return 0 am Ende gibt an, dass das Programm erfolgreich ausgeführt wurde.

Ihre Datei sollte jetzt so aussehen:

#include <stdio.h>
#include <string.h>

int main() {
    char number[20];  // Array to store the input number as a string
    int flag = 0;     // Flag to track if a decimal point is found (0 = not found, 1 = found)
    int i;            // Loop counter variable

    // Program will continue here...

    return 0;
}

Implementierung der Programmlogik

Jetzt fügen wir den restlichen Code hinzu, um die Benutzereingabe zu lesen und zu bestimmen, ob die Zahl eine Ganzzahl oder eine Fließkommazahl ist.

Ersetzen Sie den Kommentar "Program will continue here..." durch den folgenden Code:

    // Prompt the user to enter a number
    printf("Enter a number: ");
    scanf("%s", number);

    // Check each character in the number string for a decimal point
    for(i = 0; number[i] != '\0'; i++) {
        if(number[i] == '.') {
            flag = 1;  // Set flag to 1 if decimal point is found
            break;
        }
    }

    // Display the result based on the flag value
    if(flag) {
        printf("The entered number is a floating point number.\n");
    } else {
        printf("The entered number is an integer number.\n");
    }

Schauen wir uns an, was dieser Code tut:

  1. Die printf()-Anweisung zeigt eine Aufforderung an, die den Benutzer auffordert, eine Zahl einzugeben.
  2. Die scanf()-Funktion liest die Eingabe des Benutzers als Zeichenkette und speichert sie im number-Array.
  3. Wir verwenden eine for-Schleife, um jedes Zeichen der Zeichenkette zu durchlaufen, bis wir das Nullzeichen ('\0') erreichen.
  4. Innerhalb der Schleife überprüfen wir, ob jedes Zeichen ein Dezimalpunkt ('.') ist. Wenn wir einen finden, setzen wir die flag auf 1 und verlassen die Schleife.
  5. Schließlich verwenden wir eine if-Anweisung, um zu überprüfen, ob die flag gesetzt ist. Wenn ja, informieren wir den Benutzer, dass es sich um eine Fließkommazahl handelt; andernfalls um eine Ganzzahl.

Ihr vollständiges Programm sollte jetzt so aussehen:

#include <stdio.h>
#include <string.h>

int main() {
    char number[20];  // Array to store the input number as a string
    int flag = 0;     // Flag to track if a decimal point is found (0 = not found, 1 = found)
    int i;            // Loop counter variable

    // Prompt the user to enter a number
    printf("Enter a number: ");
    scanf("%s", number);

    // Check each character in the number string for a decimal point
    for(i = 0; number[i] != '\0'; i++) {
        if(number[i] == '.') {
            flag = 1;  // Set flag to 1 if decimal point is found
            break;
        }
    }

    // Display the result based on the flag value
    if(flag) {
        printf("The entered number is a floating point number.\n");
    } else {
        printf("The entered number is an integer number.\n");
    }

    return 0;
}

Kompilieren und Ausführen des Programms

Nachdem wir unser Programm geschrieben haben, lassen wir es kompilieren und ausführen, um es in Aktion zu sehen.

  1. Speichern Sie zunächst die Datei, falls Sie dies noch nicht getan haben (Strg+S oder Datei > Speichern).

  2. Öffnen Sie ein Terminal im WebIDE (falls es noch nicht geöffnet ist).

  3. Navigieren Sie in das Projektverzeichnis und kompilieren Sie das Programm mit dem GCC-Compiler:

cd ~/project
gcc main.c -o main

Der gcc-Befehl kompiliert unsere C-Quelldatei, und die Option -o main gibt an, dass die ausführbare Datei main heißen soll.

  1. Führen Sie nun das kompilierte Programm aus:
./main
  1. Wenn Sie dazu aufgefordert werden, geben Sie eine Zahl ein. Versuchen Sie zunächst eine Ganzzahl, wie 42:
Enter a number: 42

Sie sollten die folgende Ausgabe sehen:

The entered number is an integer number.
  1. Führen Sie das Programm erneut aus und versuchen Sie eine Fließkommazahl wie 3.14:
./main
Enter a number: 3.14

Sie sollten die folgende Ausgabe sehen:

The entered number is a floating point number.

Das Programm erkennt Ganzzahlen und Fließkommazahlen korrekt anhand der Anwesenheit eines Dezimalpunkts in der Eingabe.

Verbesserung des Programms

Lassen Sie uns unser Programm verbessern, um es benutzerfreundlicher und robuster zu machen. Wir fügen eine Schleife hinzu, damit der Benutzer mehrere Zahlen prüfen kann, ohne das Programm neu starten zu müssen, und wir fügen auch Eingabevalidierung hinzu.

Aktualisieren Sie Ihre main.c-Datei mit dem folgenden Code:

#include <stdio.h>
#include <string.h>
#include <ctype.h>  // For isdigit function

int main() {
    char number[20];
    int flag, i;
    char choice;

    do {
        flag = 0;  // Reset flag for each iteration

        // Prompt the user to enter a number
        printf("\nEnter a number: ");
        scanf("%s", number);

        // Input validation - check if the input contains only digits and at most one decimal point
        int valid = 1;
        int decimal_count = 0;

        for(i = 0; number[i] != '\0'; i++) {
            if(number[i] == '.') {
                decimal_count++;
                if(decimal_count > 1) {
                    valid = 0;
                    break;
                }
            } else if(!isdigit(number[i])) {
                valid = 0;
                break;
            }
        }

        if(!valid) {
            printf("Invalid input! Please enter a valid number.\n");
            continue;
        }

        // Check if the number is integer or float
        for(i = 0; number[i] != '\0'; i++) {
            if(number[i] == '.') {
                flag = 1;
                break;
            }
        }

        // Display the result
        if(flag) {
            printf("The entered number is a floating point number.\n");
        } else {
            printf("The entered number is an integer number.\n");
        }

        // Ask if the user wants to continue
        printf("\nDo you want to check another number? (y/n): ");
        scanf(" %c", &choice);

    } while(choice == 'y' || choice == 'Y');

    printf("\nThank you for using the program!\n");
    return 0;
}

Diese verbesserte Version enthält:

  1. Eine do-while-Schleife, die es dem Benutzer ermöglicht, mehrere Zahlen zu prüfen.
  2. Eingabevalidierung, um sicherzustellen, dass die Eingabe nur Ziffern und maximal einen Dezimalpunkt enthält.
  3. Eine benutzerfreundlichere Schnittstelle mit klareren Aufforderungen und Rückmeldungen.

Kompilieren und führen Sie diese verbesserte Version aus:

cd ~/project
gcc main.c -o main
./main

Testen Sie es mit verschiedenen Eingaben, einschließlich:

  • Ganzzahlen wie 42
  • Fließkommazahlen wie 3.14
  • Ungültige Eingaben wie abc oder 1.2.3

Das Programm sollte alle diese Fälle angemessen behandeln und es Ihnen ermöglichen, fortzufahren und Zahlen zu prüfen, bis Sie sich dafür entscheiden, es zu beenden.

Zusammenfassung

In diesem Lab haben Sie erfolgreich ein C-Programm erstellt, das bestimmt, ob eine vom Benutzer eingegebene Zahl eine Ganzzahl oder eine Fließkommazahl ist. Hier sind die wichtigsten Konzepte, die Sie gelernt haben:

  1. Zeichenkettenverarbeitung in C: Sie haben Zeichenarrays verwendet, um Zeichenketten zu speichern und zu verarbeiten, und durch jedes Zeichen iteriert, um seine Eigenschaften zu überprüfen.

  2. Verarbeitung von Benutzereingaben: Sie haben gelernt, wie Sie Benutzereingaben mit der scanf()-Funktion anfordern und lesen können.

  3. Kontrollstrukturen: Sie haben bedingte Anweisungen (if-else) und Schleifen (for, do-while) implementiert, um den Programmfluss zu steuern.

  4. Eingabevalidierung: In der verbesserten Version haben Sie Überprüfungen hinzugefügt, um sicherzustellen, dass die Benutzereingabe eine gültige Zahl ist.

  5. Programmverbesserung: Sie haben das grundlegende Programm verbessert, indem Sie Funktionen wie eine Benutzer-Schleife und Eingabevalidierung hinzugefügt haben, wodurch es robuster und benutzerfreundlicher geworden ist.

Diese Konzepte sind für viele Programmieraufgaben grundlegend und werden als solide Grundlage dienen, wenn Sie weiterhin C-Programmierung lernen. Die Fähigkeit, zwischen verschiedenen Datentypen zu unterscheiden, ist besonders wichtig in stark typisierten Sprachen wie C, bei denen verschiedene Datentypen unterschiedliche Speicherzuweisungen und Verhaltensweisen haben.