xq123456 发表于 2017-11-8 20:21:22

用栈的方法将二进制数转化为十进制数的问题

。。。。。//前面初始化栈就省略了,
。。。。直接从int main 开始

。。
int main()
{
ElemType c;      //ElemType是   char
sqStack s;
int len, sum, i;
InitStack ( &s );
printf("请输入有效的二进制数再以#结束\n");
scanf("%c", &c);
while ( c!='# ' )
{
Push( &s, c );
scanf("%c", c);
..........
.........
.........
.............//后面的也省略了
}
}


问题:
int mian中在while 循环中为什么还要使用一个scanf()函数?{:10_266:}{:10_266:}


BngThea 发表于 2017-11-8 20:51:24

因为上面代码是通过一个一个字符的读取输入的内容,只有遇到#才应该结束读取
如果while循环中没有scanf,那判断条件就没法被修改,要么死循环,要么不执行循环

丶忘却的年少o 发表于 2017-11-8 20:53:01

因为scanf("%c", &c)每次值会从输入流中拿取一个字符,要是输入的是1010101010#,循环外面先拿一个,剩下的都没拿,所以循环里要不段的拿取,然后入栈。

xq123456 发表于 2017-11-8 21:23:43

丶忘却的年少o 发表于 2017-11-8 20:53
因为scanf("%c", &c)每次值会从输入流中拿取一个字符,要是输入的是1010101010#,循环外面先拿一个,剩下的 ...

哦哦,那就是说scanf函数除了有输入进去的功能, 也有读取的功能吗

xq123456 发表于 2017-11-8 21:25:05

BngThea 发表于 2017-11-8 20:51
因为上面代码是通过一个一个字符的读取输入的内容,只有遇到#才应该结束读取
如果while循环中没有scanf, ...

那C语言里面scanf的功能也能读取吗?
以往都是给某个数赋值,也能读取吗

BngThea 发表于 2017-11-8 21:27:38

xq123456 发表于 2017-11-8 21:25
那C语言里面scanf的功能也能读取吗?
以往都是给某个数赋值,也能读取吗

scanf函数的功能就是将用户的额输入赋值到某个变量当中啊
比如scanf("%c", &c)
就是将用户输入的一个字符存放到c当中

丶忘却的年少o 发表于 2017-11-8 21:37:12

xq123456 发表于 2017-11-8 21:23
哦哦,那就是说scanf函数除了有输入进去的功能, 也有读取的功能吗

输入的时候肯定是读取输入流再输入给某个变量呀。就像你写的,就是从输入流stdin中拿到一个,然后给变量c。对了,读取是不放回到输入流的,所以说是拿,不是读

marszx 发表于 2017-11-15 17:14:52

你while里面的scanf是不是少了&呀??????

scanf("%c",&c);是只能输入一个字符,而不是字符串;
所以就算你一次在屏幕上输入了一个字符串,字符串也会待在缓冲区里面,而只有第一个字符被真正的读入。
你可以改成char data;scanf("%c",data);注意data前没有&;这样的话字符串就会被读入data;

marszx 发表于 2017-11-15 17:16:54

marszx 发表于 2017-11-15 17:14
你while里面的scanf是不是少了&呀??????

scanf("%c",&c);是只能输入一个字符,而不是字符串;


这样的话你可以不在while里面加scanf,但是判断条件改成for(int i=0;data != '#';i++)这样
页: [1]
查看完整版本: 用栈的方法将二进制数转化为十进制数的问题