C语言:怎么接受用户的滚键盘方式输入而程序不会崩溃
方法一:通过整形变量接收用户的输入
默认让用户输入整型的数据,一旦用户输入的数据不是整形scanf就会返回0,使得程序处于接受用户输入的循环中,每一次接收完用户的输入之后,都要调用fflush函数来清空输入流中的数据,这样就可以防止用户在通过scanf读入的数据是本次输入的数据。
int choose;
while(scanf("%d", &choose) != 1)
{
printf("input again..\n");
fflush(stdin);
}
printf("choose = %d", choose);
方法二:通过字符串数组接收用户的输入
如果你想通过一个特定长度的字符串数组来接受用户的输入,而又不想让用户的输入的字符串长度过长而导致数组越界时,可以考虑使用这种方法。
首先我们来看看错误的代码。
我们定义了一个长度为十的字符数组,通过gets函数来接收用户的输入,一旦用户的输入的数据长度超过10,程序就会因数组溢出而崩溃。
char choose[10];
gets(choose);
puts(choose);
这时候,我们可以考虑通过fgets函数来接收用户指定长度的输入,先来看看fgets函数的原型。
char *fgets(char *str, int n, FILE *stream);
函数返回一个字符,fgets函数功能为从指定的流中读取特定字节长度的数据。这里我们指定为标准输入流stdin。
接下来是正确的代码。
char choose[10];
fgets(choose, 10, stdin); //接收标准输入流中长度为10字节的数据
fflush(stdin); //清空标准输入流中的数据
puts(choose);
我们通过fgets函数指定每次只从标准输入流中读取长度为10个字节的数据,这样无论用户输入多长的字符串,都会默认只读取字符串前10个字节的数据,这样程序就不会因为数组越界而崩溃。然后再下一次接收用户新的输入前,通过fflush清空标准输入流的数据,确保每次用户读入的都是最新的数据。