在C语言编程中,处理输入数据是一个常见的任务。根据不同的情况,我们可以采用不同的输入控制方法。本文将介绍三类输入控制方式,分别是已知数据组数的输入、以特定符号结束的输入,以及以EOF结束的输入。
1. 已知数据组数的输入
在某些情况下,输入的数据组数是已知的。这种情况下,我们可以首先读取一个整数,表示数据组数,然后通过循环逐组处理数据。
示例代码:
c
#include <stdio.h>
int main() {
int n; // 数据组数
printf("请输入数据组数: ");
scanf("%d", &n); // 读取数据组数
for (int i = 0; i < n; i++) {
int num1, num2;
printf("请输入第 %d 组数据 (两个整数,用空格分隔): ", i + 1);
scanf("%d %d", &num1, &num2); // 读取每组数据
printf("第 %d 组数据是: %d 和 %d,和为: %d\n", i + 1, num1, num2, num1 + num2);
}
return 0;
}
输入输出示例:
请输入数据组数: 3
请输入第 1 组数据 (两个整数,用空格分隔): 5 10
第 1 组数据是: 5 和 10,和为: 15
请输入第 2 组数据 (两个整数,用空格分隔): 3 4
第 2 组数据是: 3 和 4,和为: 7
请输入第 3 组数据 (两个整数,用空格分隔): 8 2
第 3 组数据是: 8 和 2,和为: 10
解释:
- 用户输入的数据组数为3,每组数据由两个整数构成,程序输出它们的和。
- 第一步 :通过
scanf("%d", &n)
读取数据组数n
。 - 第二步 :使用
for
循环遍历n
次,逐组读取数据并进行处理。
2. 以特定符号结束的输入
在一些情况下,输入的数据组数是不确定的,但可以通过某个特定符号(如 @
或 -1
等)来结束输入。可以使用 while
循环和 scanf
函数来实现。
示例代码:
c
#include <stdio.h>
int main() {
char c; // 用于存储输入字符
printf("请输入数据(输入 '@' 结束):\n");
int count = 0; // 统计输入字符的数量
while (scanf(" %c", &c) && c != '@') { // 读取字符,直到遇到 '@'
printf("你输入的字符是: %c\n", c);
count++;
}
printf("你总共输入了 %d 个字符。\n", count);
return 0;
}
输入输出示例:
请输入数据(输入 '@' 结束):
a
你输入的字符是: a
b
你输入的字符是: b
c
你输入的字符是: c
@
你总共输入了 3 个字符。
解释:
- 用户输入多个字符,直到输入
@
为止,程序统计并输出输入的字符数量。 - 条件判断 :
while
循环读取字符,直到遇到@
。scanf(" %c", &c)
中的空格用于忽略前导空格和换行符 。注意%c前面的空格.
- 处理输入:在每次循环中,程序输出读取的字符。
3. 以EOF结束的输入
在某些情况下,输入没有明确的结束项,而是通过文件结束符(EOF)来结束。可以通过检查 scanf
的返回值来实现此功能。在Windows系统中,可以通过 Ctrl + Z
组合键然后按回车键模拟EOF。
示例代码:
c
#include <stdio.h>
int main() {
int num; // 存储输入的整数
printf("请输入数字(Ctrl + Z 然后回车键 结束输入):\n");
int sum = 0; // 存储输入数字的总和
int count = 0; // 统计输入数字的数量
while (scanf("%d", &num) != EOF) { // 循环读取整数,直到EOF
sum += num;
count++;
printf("你输入的数字是: %d\n", num);
}
if (count > 0) {
printf("你总共输入了 %d 个数字,和为: %d\n", count, sum);
} else {
printf("没有输入任何数字。\n");
}
return 0;
}
输入输出示例:
请输入数字(Ctrl + Z 结束输入):
1
你输入的数字是: 1
2
你输入的数字是: 2
3
你输入的数字是: 3
Ctrl + Z
你总共输入了 3 个数字,和为: 6
解释:
- 用户输入多个整数,程序在用户输入 EOF 时结束读取,并输出输入的数字总和和数量。
- EOF检测 :通过
scanf("%d", &num) != EOF
检查输入是否结束。 - 数据处理:在每次成功读取整数后,输出该数字。
总结
在C语言中,输入控制的方式多种多样。根据数据的特点和输入的要求,可以选择合适的方法进行数据读取:
- 已知数据组数 :使用
scanf
读取组数,然后循环处理每组数据。 - 特定符号结束 :使用
while
循环,直到输入特定字符结束。 - EOF结束 :使用
while
循环,检测输入是否结束。
这些方法能够帮助你灵活地处理输入数据,适应不同的需求和场景。
注解:
在格式字符串的开头添加空格,例如 scanf(" %c", &c),是为了忽略所有的前导空白字符(空格、换行符、制表符等)。这意味着在读取字符时,程序会自动跳过输入缓冲区中任何空白字符,直到找到一个非空白字符进行读取。这在处理用户输入时特别有用,可以防止用户意外输入空白字符导致的错误。