进击的小白Day035——知识点:批量输入数值或字符串,并存入数组中

  1. 一次性输入一组浮点数,数值与数值之间用逗号隔开,输入完毕以换行符结束,将这一组数存入一个浮点数组中,输入的浮点数个数不定
    如:
    输入:
1.2,2.4,6.0,7.8,9.66

输出:

1.2,2.4,6.0,7.8,9.66

贴代码:

float a[100];
int i = 0, n = 0;
char c = '0';
do
{
	scanf("%f", &a[i]);  //存输入中的浮点数
	i++;
	n++;
	scanf("%c", &c);  //存输入中的逗号,并防止逗号干扰数值的录入
} while (c == ',');  //用于终止循环录入

for (i = 0; i < n; i++)  //输出
{
	if (i < n - 1)
	{
		printf("%f,", a[i]);
	}
	else
	{
		printf("%f", a[i]);
	}
}

运行结果:
在这里插入图片描述

  1. 录入一堆字符串,用二维数组储存,字符串之间用换行符分隔,字符串字符个数小于64,字符串数量小于100但不定
    如:
    输入:
asd
sdsdfs
124ssa
==asd55
fsd

输出:

asd
sdsdfs
124ssa
==asd55
fsd

贴代码:

int i = 0, n = 0;
int flag = 0;
char ss[101][64];  //维度为101而不是100,是因为最后一个空字符串用来退出输入循环

for (i = 0; i < 100; i++)
{
	memset(ss[i], 0, sizeof(ss[i]));
}

i = 0;
do
{
	gets(ss[i]);
	flag = strcmp(ss[i], "");  //判断是否为空字符串
	i++;
	n++;
} while (flag != 0);

for (i = 0; i < n; i++)
{
	printf("%s\n", ss[i]);
}

运行结果:
在这里插入图片描述
与下一段代码进行比较:

int i = 0, n = 0, j = 0;
int flag = 0;
char ss[101][64];

for (i = 0; i < 100; i++)
{
	memset(ss[i], 0, sizeof(ss[i]));
}

i = 0;
do
{
	j = 0;
	while ((ss[i][j++] = getchar()) != '\n');  //如果定义字符数组ss时没有用memset对其进行初始化,那么要手动在每个字符串后面加'\0',即加一句“ss[i][j] = '\0'”
	flag = strcmp(ss[i], "\n");  //这里与"\n"比较而不是与""比较,因为"\n"被录入了
	i++;
	n++;
} while (flag != 0);

for (i = 0; i < n; i++)
{
	printf("%s\n", ss[i]);
}

运行结果:
在这里插入图片描述
输出的时候之所有多了很多空行,是因为再用getchar录入字符串的时候,把最后的’\n’也录入了,因此在输出的时候会多很多空行。

  1. 按照2的方式录入字符串并去重
    如:
    输入:
asd
sdsdfs
asd
==asd55
asd

输出:

asd
sdsdfs
==asd55

贴代码:

int i = 0, j = 0, n = 0;
int flag = 0;
char ss[101][64];

for (i = 0; i < 100; i++)
{
	memset(ss[i], 0, sizeof(ss[i]));
}

i = 0;
do
{
	gets(ss[i]);
	flag = strcmp(ss[i], "");
	for (j = 0; j < i; j++)  //去重
	{
		if (strcmp(ss[i], ss[j]) == 0)  //若重复,清除字符串并让i退一位
		{
			memset(ss[i], 0, sizeof(ss[i]));
			i--;
			break;
		}
	}		
	i++;
	n++;
} while (flag != 0);

for (i = 0; i < n; i++)
{
	printf("%s\n", ss[i]);
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值