在 C 语言中判断整数或浮点数

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将编写一个 C 程序,用于判断用户输入的数字是整数还是浮点数。这是编程中的一个基本概念,不同的数据类型有不同的内存需求和行为。

你将重点关注检测输入中是否存在小数点,以此来确定该数字是否为浮点值。这个实验将向你介绍 C 语言中的基本字符串处理、用户输入处理和条件逻辑。

在这个实验结束时,你将学会如何:

  • 在 C 语言中以字符串形式读取用户输入
  • 检查字符串中是否存在特定字符
  • 使用条件逻辑根据输入做出决策

创建并打开 C 程序文件

让我们先为程序创建一个新的 C 文件。你可以将其命名为 main.c,并将其放在项目目录中。

  1. 首先,确保你位于项目目录中:
cd ~/project
  1. 现在,在 WebIDE 中,点击“File”菜单,选择“New File”,并将其命名为 main.c。或者,你也可以使用文件资源管理器侧边栏中的“New File”图标。

  2. 文件编辑器将自动打开。让我们为程序添加所需的头文件:

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

这些头文件对程序来说至关重要:

  • stdio.h 提供了标准输入和输出操作的函数,如 printf()scanf()
  • string.h 提供了字符串操作的函数,不过在这个简单的程序中,你主要会用它来计算字符串的长度。

注意,我们没有像原始模板中那样包含 conio.h。这是因为 conio.h 不是标准的 C 库,并且在包括我们的 Ubuntu 环境在内的许多系统中都不可用。

添加主函数并声明变量

现在你已经有了头文件,接下来添加 main() 函数,并声明程序所需的变量。

在你的 main.c 文件中添加以下代码:

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;
}

下面来了解一下这些变量:

  • number[20]:这是一个字符数组(字符串),用于存储用户输入的内容。你将数组大小增加到 20 个字符,以容纳更大的数字。
  • flag:这个整数变量将作为一个布尔标志。如果你在输入中找到小数点,就将其设置为 1。
  • i:这是一个用于循环的简单计数器变量。

main() 函数是 C 程序的入口点。你编写的所有代码都将放在这个函数内部。末尾的 return 0 语句表示程序已成功执行。

现在,你的文件应该如下所示:

#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;
}

实现程序逻辑

现在,让我们添加剩余的代码,以读取用户输入并判断该数字是整数还是浮点数。

将“Program will continue here...”注释替换为以下代码:

    // 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");
    }

下面来看看这段代码的作用:

  1. printf() 语句显示一个提示信息,要求用户输入一个数字。
  2. scanf() 函数将用户输入作为字符串读取,并存储在 number 数组中。
  3. 使用 for 循环遍历字符串的每个字符,直到遇到空字符 ('\0')。
  4. 在循环内部,检查每个字符是否为小数点 ('.')。如果找到小数点,则将 flag 设置为 1 并退出循环。
  5. 最后,使用 if 语句检查 flag 是否被设置。如果设置了,则告知用户该数字是浮点数;否则,该数字是整数。

现在,你的完整程序应该如下所示:

#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;
}

编译并运行程序

现在我们已经编写好了程序,接下来编译并运行它,看看实际效果。

  1. 如果你还没有保存文件,请先保存(使用 Ctrl+S 快捷键或选择“文件” > “保存”)。
  2. 在 WebIDE 中打开终端(如果尚未打开的话)。
  3. 导航到项目目录,并使用 GCC 编译器编译程序:
cd ~/project
gcc main.c -o main

gcc 命令用于编译我们的 C 源文件,-o main 选项指定输出的可执行文件名为 main

  1. 现在运行编译好的程序:
./main
  1. 当出现提示时,输入一个数字。先尝试输入一个整数,比如 42
Enter a number: 42

你应该会看到如下输出:

The entered number is an integer number.
  1. 再次运行程序,并尝试输入一个浮点数,比如 3.14
./main
Enter a number: 3.14

你应该会看到如下输出:

The entered number is a floating point number.

该程序会根据输入中是否存在小数点,正确识别整数和浮点数。

改进程序

让我们对程序进行改进,使其更加用户友好和健壮。我们将添加一个循环,这样用户就可以在不重启程序的情况下检查多个数字,同时还会添加输入验证功能。

用以下代码更新你的 main.c 文件:

#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;
}

这个改进版本包含以下内容:

  1. 一个 do-while 循环,允许用户检查多个数字。
  2. 输入验证功能,确保输入仅包含数字,且最多有一个小数点。
  3. 更友好的用户界面,提供更清晰的提示和反馈。

编译并运行这个改进版本:

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

使用各种输入进行测试,包括:

  • 整数,如 42
  • 浮点数,如 3.14
  • 无效输入,如 abc1.2.3

程序应该能够妥善处理所有这些情况,并允许你继续检查数字,直到你选择退出。

总结

在这个实验中,你成功创建了一个 C 程序,用于判断用户输入的数字是整数还是浮点数。以下是你学到的关键概念:

  1. C 语言中的字符串处理:你使用字符数组来存储和处理字符串数据,并遍历每个字符以检查其属性。
  2. 用户输入处理:你学习了如何使用 scanf() 函数提示并读取用户输入。
  3. 控制结构:你实现了条件语句 (if-else) 和循环 (fordo-while) 来控制程序的流程。
  4. 输入验证:在改进版本中,你添加了检查机制,以确保用户输入的是有效数字。
  5. 程序改进:你通过添加用户循环和输入验证等功能改进了基础程序,使其更加健壮和用户友好。

这些概念是许多编程任务的基础,在你继续学习 C 语言编程时将成为坚实的基础。能够区分不同类型的数据在像 C 这样的强类型语言中尤为重要,因为不同的数据类型具有不同的内存分配和行为。