简介
在这个实验中,你将编写一个 C 程序,用于判断用户输入的数字是整数还是浮点数。这是编程中的一个基本概念,不同的数据类型有不同的内存需求和行为。
你将重点关注检测输入中是否存在小数点,以此来确定该数字是否为浮点值。这个实验将向你介绍 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;
}
现在我们已经编写好了程序,接下来编译并运行它,看看实际效果。
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 程序,用于判断用户输入的数字是整数还是浮点数。以下是你学到的关键概念:
scanf()
函数提示并读取用户输入。if-else
) 和循环 (for
、do-while
) 来控制程序的流程。这些概念是许多编程任务的基础,在你继续学习 C 语言编程时将成为坚实的基础。能够区分不同类型的数据在像 C 这样的强类型语言中尤为重要,因为不同的数据类型具有不同的内存分配和行为。