我想问一下,用联合类型,可以使一个数组中既可以输入数字又可以输入字符,这样可以实现输入小数吧。那在输入的形式上,数字输入要用scanf函数,而字符输入要用getchar函数,那在输入之前,我们又不知道是输入的数字还是字符,这样,我们怎样做呢?而且在输出的时候,如果是整型的话则用%d 而字符型则用%c ,那在用printf函数时,又该怎样做呢?
有点疑惑,希望大佬解释下。拜托啦。
直接用%f就可以实现浮点数输入啊, 如果数太长了, scanf不能正确读取的话, 你也没办法用这些数值类型来保存你要读取的数的,就直接一个一个字符读取进来就行了.
数字不一定要用scanf, 字符输入不一定要getchar. 不知道输入会是什么一律按字符(串)读.
联合体你访问什么类型的成员它就是什么类型的变量. 而且根本没必要用
题目第二问要用数组,如果是个小数的话,就一定有小数点呀,在数组里面怎么表示??
@shmily涂: 读进来的是什么, 就保存成什么啊, 就当个字符串就行了, 上限都60了, long long int都存不下了, 只能当字符串了, 一个一个字符数就行了, 从前面往后面, 空白字符 丢掉, 符号丢掉, 开头的0丢掉, 然后数, 到碰到小数点.
@jakio6: 输入小数直接用字符数组就可以了,这我懂了。那对于求有效位:怎样做呢?
@jakio6:
int is_choose(char *a)
{
int i,n,x,y;
for (i = 0; *a != '.';a++)
{
if (a[0] == 0)
{
y = 0;
goto tip;
}
else if(a[0] != 0)
{
y = 1;
goto tip;
}
if (*a == 0)
{
for (n = a - &a[0]; n >= 0;n--)
{
if (a[n] == 0)
x = 0;
else
{
x = 1;
break;
}
}
if (x == 1)
i++;
}
if (*a != 0)
i++;
tip:
i = 0;
}
return i + y;
}
@jakio6: 为什么怎么输入都是1
@shmily涂: 你要做什么, 你这返回i+y, 每次改了y就给i置零, 还有, 了解ascii码表先
@shmily涂:
#include <stdio.h>
int main(int argc, char *argv[])
{
int ch;
int zeros = 1;
int flag = 1;
int spaces = 1;
int cnt = 0;
while((ch = fgetc(stdin)) != EOF) {
if(spaces && ch == ' ') {
continue;
}
if(flag && (ch == '-' || ch == '+')) {
flag = 0;
spaces = 0;
continue;
}
if(zeros && ch == '0') {
flag = 0;
spaces = 0;
continue;
}
zeros = 0;
if( ch >= '0' && ch <= '9') {
cnt++;
} else {
break;
}
}
printf("cnt = %d\n", cnt);
return 0;
}
@jakio6: # include<stdio.h>
int main()
{
char a[M];
int i,n;
printf("请输入一个数字:");
gets(a);
n = 0;
for (i = 0;a[i] != '.';i++)
{
n++;
}
printf("该数的有效位为:%d",n+p);
return 0;
}
想问一下,就是如果输入的数字中第一位,第二位含有0,这样也会被算进去,那怎样除掉这种情况呢?
@shmily涂: 我贴了一份代码呀
图片看不清我写个大概的好了
import re
int_text = input('输入你的数字')
if '.' in int_text:
int_text=int_text.split('.')[0]
b = re.search('[1-9]\d*',int_text)
print(len(b[0])) if b else print(0)
int main()
{
union a{
int i;
char d;
}
union a a[M];
printf("请将一个数字一个个的输入,如果有小数点直接用小数点输入\a");
for (;;)
{
i = 0;
printf("请输入一个数字或小数点:");
scanf("%d",&a[i]);
if (getchar() = '.')
a[i] = getchar();
}
printf("该数为:");
return 0;
}
我现在学的是C语言,不太懂你写的,C语言还没学完。
@shmily涂: 那我就当你不会正则了给你讲下思路,
一.先变成字符串
二.如果里面.
'按.
进行进行切分取第一个
三.如果没点不做处理
四.获取当前字段长度
五.遍历字符串,如果是0
接着遍历且获取遍历次数+1如果不是0
.返回遍历次数.如果变量结束还是0
,返回遍历次数
六.上面获取的长度减去下面遍历的次数