C语言:怎么接受用户的滚键盘方式输入而程序不会崩溃

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清空标准输入流的数据,确保每次用户读入的都是最新的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值