C语言如何由键盘输入
C语言中可以通过多种方式从键盘输入数据,常用的方法有scanf函数、getchar函数、fgets函数。scanf函数是最常用的输入函数之一,它可以读取格式化输入的数据。getchar函数用于读取单个字符,适合处理字符输入。fgets函数可以读取一行字符串,适合处理字符串输入。scanf函数最常用且适用范围广,我们将详细介绍它的使用方法。
一、scanf函数
1、基本用法
scanf
函数用于从标准输入设备(键盘)读取数据,并将数据存储到变量中。其基本语法如下:
int scanf(const char *format, ...);
其中,format
是格式控制字符串,用于指定输入的数据类型和格式;...
表示可变参数,用于指定存储输入数据的变量。
例如,读取一个整数和一个浮点数:
int a;
float b;
scanf("%d %f", &a, &b);
在这段代码中,%d
和%f
分别表示读取整数和浮点数,&a
和&b
是变量的地址,用于存储读取到的数据。
2、格式控制字符串
scanf
函数的格式控制字符串与printf
函数类似,用于指定输入数据的类型。常见的格式控制符包括:
%d
:读取整数%f
:读取浮点数%c
:读取字符%s
:读取字符串
例如,读取一个字符和一个字符串:
char c;
char str[100];
scanf("%c %s", &c, str);
二、getchar函数
1、基本用法
getchar
函数用于从标准输入设备读取一个字符。其基本语法如下:
int getchar(void);
该函数不需要任何参数,返回值是读取的字符。
例如,读取一个字符并打印:
char c;
c = getchar();
printf("You entered: %cn", c);
2、处理字符输入
getchar
函数适合处理字符输入,尤其是在循环中读取多个字符。例如,读取一行字符:
char c;
while ((c = getchar()) != 'n') {
putchar(c);
}
在这段代码中,循环读取字符,直到遇到换行符为止。
三、fgets函数
1、基本用法
fgets
函数用于从标准输入设备读取一行字符串。其基本语法如下:
char *fgets(char *str, int n, FILE *stream);
其中,str
是存储读取数据的字符数组,n
是要读取的最大字符数,stream
指定输入流,通常使用stdin
表示标准输入设备。
例如,读取一行字符串:
char str[100];
fgets(str, 100, stdin);
printf("You entered: %sn", str);
2、处理字符串输入
fgets
函数适合处理字符串输入,可以避免缓冲区溢出问题。例如,读取并打印一行字符串:
char str[100];
fgets(str, 100, stdin);
printf("You entered: %sn", str);
在这段代码中,fgets
函数读取最多99个字符,并将其存储到字符数组str
中。
四、输入缓冲区处理
1、缓冲区问题
在使用scanf
和getchar
函数时,常会遇到输入缓冲区的问题。例如,使用scanf
读取整数后,再使用getchar
读取字符时,缓冲区中可能残留换行符,导致getchar
读取到换行符而不是预期的字符。
2、清空缓冲区
可以通过多种方式清空输入缓冲区。例如,使用循环读取缓冲区中的字符,直到遇到换行符为止:
int c;
while ((c = getchar()) != 'n' && c != EOF);
在这段代码中,循环读取并丢弃缓冲区中的字符,直到遇到换行符或文件结束符为止。
五、错误处理
1、输入错误检测
在使用scanf
函数时,可以通过返回值检测输入错误。scanf
函数的返回值是成功读取的项数,如果返回值小于预期值,则表示输入错误。例如:
int a;
if (scanf("%d", &a) != 1) {
printf("Input error!n");
}
2、输入验证
在读取输入数据后,通常需要进行输入验证。例如,验证输入的整数是否在预期范围内:
int a;
scanf("%d", &a);
if (a < 0 || a > 100) {
printf("Invalid input!n");
}
六、实际应用案例
1、读取多个数据
结合上述方法,可以实现复杂的数据输入。例如,读取多个整数并计算平均值:
#include <stdio.h>
int main() {
int n, sum = 0;
printf("Enter the number of integers: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int num;
printf("Enter integer %d: ", i + 1);
scanf("%d", &num);
sum += num;
}
double average = (double)sum / n;
printf("Average: %.2fn", average);
return 0;
}
2、读取字符串并处理
使用fgets
函数读取一行字符串,并统计其中的字符数:
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, 100, stdin);
int length = strlen(str);
if (str[length - 1] == 'n') {
str[length - 1] = '