C语言一个给char类型数组赋值问题。
比如说我定义了一个数组achara[10];没有赋初值。然后通过scanf给a赋值scanf("%s",a);赋的值是:1111000010首先为什么给a赋值的时候不用加...
比如说我定义了一个数组a
char a[10];
没有赋初值。
然后通过scanf给a赋值
scanf("%s",a);
赋的值是:1111000010
首先为什么给a赋值的时候不用加&这个符号呢?
还有赋值之后 比如我要输出数组的值
结果是
a[0]=1111000010
a[1]=111000010
a[2]=11000010
a[3]=1000010
a[4]=000010
a[5]=00010
…………
为什么会是这样
如何才能让输出的结果
a[1]=1
a[2]=1
a[3]=1
a[4]=1
a[5]=0
……
如果才能分开呢? 用gets给数组赋值也是这样的情况。
因为我是在做一个进制转换的问题 输入一串二进制的数转换成十进制,遇上这个问题了, 解决不了啊 ,求大神帮忙。 展开
char a[10];
没有赋初值。
然后通过scanf给a赋值
scanf("%s",a);
赋的值是:1111000010
首先为什么给a赋值的时候不用加&这个符号呢?
还有赋值之后 比如我要输出数组的值
结果是
a[0]=1111000010
a[1]=111000010
a[2]=11000010
a[3]=1000010
a[4]=000010
a[5]=00010
…………
为什么会是这样
如何才能让输出的结果
a[1]=1
a[2]=1
a[3]=1
a[4]=1
a[5]=0
……
如果才能分开呢? 用gets给数组赋值也是这样的情况。
因为我是在做一个进制转换的问题 输入一串二进制的数转换成十进制,遇上这个问题了, 解决不了啊 ,求大神帮忙。 展开
展开全部
输出的时候用
int i = 0;
for (i=0; i<10; i++) {
printf("a[%d]=%c\n", i, a[i]);
}
防止缓冲区溢出可以用这样的:
fgets(a, sizeof(a), stdin);
a[strlen(a) - 1] = '\0';
追问
这个。。。。。。那个fgets(a,sizeof(a),stdin);a[strlen(a)-1]='\0';这两条语句可以帮我解释一下吗。。。看不懂。。。。。。。
追答
scanf不会检查数组a的长度,所以如果你输入的数据长度超过9的话就会出问题,fgets限定接收的数据长度,第一个参数为缓冲区首地址,第二个为缓冲区长度,第三个为文件指针,这里用的是标准输入。
由于fgets会把结尾的回车也输入进去,第二句用来把回车符'\n'替换为字符串结尾字符'\0'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
作为初学者,仅仅为了熟悉编程,程序中接受键盘输入方式很多,一样样来,虽然不建议使用scanf,但是你想用用看,就按你的思路吧,直接帮你转十进制数了,关于单个字符输出,zpl1986 说的很明了了。
一下是转10进制并输出的代码:
char a[10] = {0};
scanf("%s",a);
int lRes = 0;
for (int i = 0; (i < 10) && (a[i] != 0); i++)
{
if (('0' != a[i]) && ('1' != a[i]))
{
printf("input error\r\n");
break;
}
lRes <<= 1;
lRes += (a[i] - '0');
}
printf("Dec Res = %d\r\n", lRes);
一下是转10进制并输出的代码:
char a[10] = {0};
scanf("%s",a);
int lRes = 0;
for (int i = 0; (i < 10) && (a[i] != 0); i++)
{
if (('0' != a[i]) && ('1' != a[i]))
{
printf("input error\r\n");
break;
}
lRes <<= 1;
lRes += (a[i] - '0');
}
printf("Dec Res = %d\r\n", lRes);
追问
很感谢你哈,还特意谢了代码给我。 能问一下为什么不建议用scanf吗?
你的代码我会认真参考的, 不过代码还是得自己写, 毕竟是学习,得多动脑啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么你用gets和scanf("%s",a);呢,不对a加&,是因为a本身就是一个地址
为什么不用getc和scanf("%c",&a[0])进行一个个赋值呢
为什么不用getc和scanf("%c",&a[0])进行一个个赋值呢
更多追问追答
追问
因为我在输入的时候 是要做到能一次性输入所有的数据1111111这样一连串二进制数,
追答
你这样很危险,如果输入个数超过了数组大小呢。
如果想这么做,就当参数传给main函数,使用带参数的main进行处理吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你输出的时候用printf("%c",a[i]);而不要用printf("%s",a[i]);
追问
那个%s和%c有什么区别啊?求解
追答
%s输出的是字符串,当碰到 结束字符'\0'时停步输出
%c只输出一个字符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询