关于解决输入整形变量时输入字符型造成死循环

需求

当我们用scanf()输入整形数字时,往往会遇到输入字符造成死循环的情况,现在我们来解决这个问题。

这问题是我在学校的实践课中遇到的问题,然后在网上找了一些资料。

分析

当我们输入整形数据时,整形变量就会接收,但是当我们输入字符型时,scanf()不会接收字符并且跳过,这时字符并不会自己消失掉,它会一直存储在缓存区中,然后scanf()一直读取一直跳过,从而造成死循环

例如
while(scanf("%d",&n)!=EOF)
{
    if(n==1)
    printf("%d",n);
    else 
        printf("输入错误");  
}

输入常规整形时
在这里插入图片描述

当我们输入字符型时,会造成死循环

请添加图片描述

解决方法
//这时我们可以用一个字符数组来接收这种问题
	#include"stdio.h"
#include"stdlib.h"
#include<string.h>
int main()
{
	int n,m,i,j;
	char x,s[20];
	while(scanf("%s",s)!=EOF)
	{
		
		if(strlen(s)!=1) 
		{
			printf("输入错误,请重新输入\n");
			continue;
		}
		m=s[0]-'0';	
		if(m==1) printf("%d\n",n);
		else 
		printf("输入错误,请重新输入\n");
	}
}

这时我们就可以解决这个问题请添加图片描述

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我为您介绍一下。 1. 输入整形: 在C语言中,可以使用scanf函数来输入整形数据,其函数原为: ```c int scanf(const char* format, ...); ``` 其中,`format`为格式化字符串,用来指定输入的数据类型和格式。如果要输入整形数据,可以使用`%d`格式控制符。例如: ```c int num; scanf("%d", &num); ``` 这里,`%d`用来指定输入的是一个整形数据,`&num`则是获取num变量的地址,将输入的数据存储到该地址中。 2. 输入字符: 同样地,在C语言中,可以使用scanf函数来输入字符数据。使用`%c`格式控制符来指定输入的是一个字符数据。例如: ```c char ch; scanf("%c", &ch); ``` 这里,`%c`用来指定输入的是一个字符数据,`&ch`则是获取ch变量的地址,将输入的数据存储到该地址中。 需要注意的是,在输入字符数据,scanf函数自动读取并忽略掉输入缓冲区中的空格、换行符等空白字符,因此可能导致一些意外的输入结果。 3. 输入整形数组: 要输入整形数组,可以使用循环结构和scanf函数配合使用。例如: ```c int arr[5]; for(int i = 0; i < 5; i++) { scanf("%d", &arr[i]); } ``` 这里,使用了循环结构,将scanf函数反复执行,每次输入一个整形数据,并存储到数组中。 4. 输入字符串: 要输入字符串,需要使用字符数组来存储。在scanf函数中,可以使用`%s`格式控制符来指定输入的是字符串。例如: ```c char str[20]; scanf("%s", str); ``` 这里,`%s`用来指定输入的是字符串,`str`则是字符数组的名称,用来存储输入字符串数据。 需要注意的是,在输入字符,scanf函数自动读取并忽略掉输入缓冲区中的空格、换行符等空白字符,因此可能导致一些意外的输入结果。此外,为了避免输入字符串长度超过数组的大小,建议使用指定最大输入长度的方式来输入字符串,例如: ```c char str[20]; scanf("%19s", str); ``` 这里,`%19s`用来指定最大输入长度为19,避免了输入字符串长度超过数组大小的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值