介绍
在这个实验中,你将编写一个 C 程序,用于判断用户输入的数字是整数还是浮点数。这是编程中的一个基本概念,不同的数据类型有不同的内存需求和行为。
你将重点关注检测输入中是否存在小数点,以此来确定该数字是否为浮点值。这个实验将向你介绍 C 语言中的基本字符串处理、用户输入处理和条件逻辑。
在这个实验结束时,你将学会如何:
- 在 C 语言中以字符串形式读取用户输入
- 检查字符串中是否存在特定字符
- 使用条件逻辑根据输入做出决策
创建并打开 C 程序文件
让我们先为程序创建一个新的 C 文件。你可以将其命名为 main.c,并将其放在项目目录中。
- 首先,确保你位于项目目录中:
cd ~/project
现在,在 WebIDE 中,点击“File”菜单,选择“New File”,并将其命名为
main.c。或者,你也可以使用文件资源管理器侧边栏中的“New File”图标。文件编辑器将自动打开。让我们为程序添加所需的头文件:
#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");
}
下面来看看这段代码的作用:
printf()语句显示一个提示信息,要求用户输入一个数字。scanf()函数将用户输入作为字符串读取,并存储在number数组中。- 使用
for循环遍历字符串的每个字符,直到遇到空字符 ('\0')。 - 在循环内部,检查每个字符是否为小数点 (
'.')。如果找到小数点,则将flag设置为 1 并退出循环。 - 最后,使用
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;
}
编译并运行程序
现在我们已经编写好了程序,接下来编译并运行它,看看实际效果。
- 如果你还没有保存文件,请先保存(使用 Ctrl+S 快捷键或选择“文件” > “保存”)。
- 在 WebIDE 中打开终端(如果尚未打开的话)。
- 导航到项目目录,并使用 GCC 编译器编译程序:
cd ~/project
gcc main.c -o main
gcc 命令用于编译我们的 C 源文件,-o main 选项指定输出的可执行文件名为 main。
- 现在运行编译好的程序:
./main
- 当出现提示时,输入一个数字。先尝试输入一个整数,比如
42:
Enter a number: 42
你应该会看到如下输出:
The entered number is an integer number.
- 再次运行程序,并尝试输入一个浮点数,比如
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;
}
这个改进版本包含以下内容:
- 一个
do-while循环,允许用户检查多个数字。 - 输入验证功能,确保输入仅包含数字,且最多有一个小数点。
- 更友好的用户界面,提供更清晰的提示和反馈。
编译并运行这个改进版本:
cd ~/project
gcc main.c -o main
./main
使用各种输入进行测试,包括:
- 整数,如
42 - 浮点数,如
3.14 - 无效输入,如
abc或1.2.3
程序应该能够妥善处理所有这些情况,并允许你继续检查数字,直到你选择退出。
总结
在这个实验中,你成功创建了一个 C 程序,用于判断用户输入的数字是整数还是浮点数。以下是你学到的关键概念:
- C 语言中的字符串处理:你使用字符数组来存储和处理字符串数据,并遍历每个字符以检查其属性。
- 用户输入处理:你学习了如何使用
scanf()函数提示并读取用户输入。 - 控制结构:你实现了条件语句 (
if-else) 和循环 (for、do-while) 来控制程序的流程。 - 输入验证:在改进版本中,你添加了检查机制,以确保用户输入的是有效数字。
- 程序改进:你通过添加用户循环和输入验证等功能改进了基础程序,使其更加健壮和用户友好。
这些概念是许多编程任务的基础,在你继续学习 C 语言编程时将成为坚实的基础。能够区分不同类型的数据在像 C 这样的强类型语言中尤为重要,因为不同的数据类型具有不同的内存分配和行为。



