- 一次性输入一组浮点数,数值与数值之间用逗号隔开,输入完毕以换行符结束,将这一组数存入一个浮点数组中,输入的浮点数个数不定
如:
输入:
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]);
}
}
运行结果:
- 录入一堆字符串,用二维数组储存,字符串之间用换行符分隔,字符串字符个数小于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’也录入了,因此在输出的时候会多很多空行。
- 按照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]);
}
运行结果: