跳到主要内容

C语言编程入门之scanf函数输入多个值

在 C 语言中,你可以使用 scanf 一次性读取多个 float 值。通过在 scanf 中提供多个格式化说明符(如 %f),可以从用户输入中依次读取多个 float 数值。

示例代码

下面是一个简单的示例,演示如何一次性读取多个 float 值:

#include <stdio.h>

int main() {
float num1, num2, num3;

// 提示用户输入三个浮点数
printf("请输入三个浮点数,以空格分隔:\n");

// 使用 scanf 一次读取多个浮点数
scanf("%f %f %f", &num1, &num2, &num3);

// 输出读取到的值
printf("你输入的三个浮点数是:%.2f, %.2f, %.2f\n", num1, num2, num3);

return 0;
}

代码讲解

  1. 声明变量float num1, num2, num3; 这三个变量用于存储用户输入的 float 类型数值。
  2. scanf 函数scanf("%f %f %f", &num1, &num2, &num3); 这行代码通过 scanf 函数从用户输入中读取三个 float 类型的数值,并将它们分别存储在 num1, num2, num3 中。注意每个 float 类型的变量都需要传递地址符 &
  3. 格式化输出printf 函数将读取到的 float 值打印出来,格式为小数点后保留两位。

运行示例

请输入三个浮点数,以空格分隔:
1.23 4.56 7.89
你输入的三个浮点数是:1.23, 4.56, 7.89

注意事项

  • 输入格式:用户需要输入三个以空格或回车分隔的浮点数。scanf 函数会自动处理输入中的空格和回车符。
  • 输入类型匹配:如果用户输入的内容不能正确匹配 %f,则 scanf 函数将无法正确解析输入。

这个方法可以很方便地一次性读取多个 float 值,适用于简单的多输入场景。

当然可以!我们可以通过检查每个字符的 ASCII 码值来实现 isdigit 的功能,因为数字字符 '0''9' 的 ASCII 码值分别是 48 到 57。所以,只要判断字符的 ASCII 码是否在这个范围内,就可以确定它是否是一个数字。

下面是不用 isdigit 函数,而是通过手动检查字符的实现。

示例:不使用 isdigit 实现数字判断

#include <stdio.h>

// 自己实现的 isDigit 函数,用于判断字符是否为数字
int isDigit(char ch) {
return (ch >= '0' && ch <= '9'); // 判断是否在 '0' 到 '9' 之间
}

int main() {
char input[100];
printf("请输入一个字符串: ");
scanf("%s", input); // 读取输入字符串

int i = 0;
int isNumber = 1; // 假设输入是数字

// 遍历每一个字符,检查是否为数字
while (input[i] != '\0') {
if (!isDigit(input[i])) {
isNumber = 0; // 如果有任意一个字符不是数字,则标记为非数字
break;
}
i++;
}

if (isNumber) {
printf("输入是一个数字。\n");
} else {
printf("输入不是一个数字。\n");
}

return 0;
}

解释:

  1. isDigit 函数:通过比较字符的 ASCII 码来判断是否是数字字符。如果字符在 '0''9' 之间,就返回 1,否则返回 0。
  2. 主程序:和之前的程序逻辑相同,读取输入字符串,然后逐个字符判断是否为数字。

输出示例:

请输入一个字符串: 12345
输入是一个数字。

请输入一个字符串: 12a45
输入不是一个数字。

扩展:支持浮点数或负数

我们可以在这个基础上扩展,支持浮点数和负数的输入,和之前的思路类似。

#include <stdio.h>

// 判断字符是否是数字
int isDigit(char ch) {
return (ch >= '0' && ch <= '9');
}

int isNumeric(char input[]) {
int i = 0;

// 如果输入以负号开头,跳过负号的检查
if (input[0] == '-') {
i++;
}

int hasDecimal = 0; // 用于检查是否有小数点

while (input[i] != '\0') {
if (input[i] == '.') {
if (hasDecimal) {
return 0; // 如果已经有小数点,再遇到第二个小数点则返回 0
}
hasDecimal = 1;
} else if (!isDigit(input[i])) {
return 0; // 如果不是数字字符,也不是小数点,则返回 0
}
i++;
}
return 1;
}

int main() {
char input[100];
printf("请输入一个字符串: ");
scanf("%s", input); // 读取输入字符串

if (isNumeric(input)) {
printf("输入是一个有效的数字。\n");
} else {
printf("输入不是一个有效的数字。\n");
}

return 0;
}

这个版本允许输入负数和浮点数,并且继续使用手动判断字符是否为数字字符的 isDigit 函数。

编程实战1990公众号二维码

10年软件开发经验,分享编程零基础入门教学文章视频,小项目从0到1开发迭代升级流程。 分享如何通过技术做出产品源源不断的进行盈利。关于我,学习更多编程知识。