用栈的方法将二进制数转化为十进制数的问题
。。。。。//前面初始化栈就省略了,。。。。直接从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:}
因为上面代码是通过一个一个字符的读取输入的内容,只有遇到#才应该结束读取
如果while循环中没有scanf,那判断条件就没法被修改,要么死循环,要么不执行循环 因为scanf("%c", &c)每次值会从输入流中拿取一个字符,要是输入的是1010101010#,循环外面先拿一个,剩下的都没拿,所以循环里要不段的拿取,然后入栈。 丶忘却的年少o 发表于 2017-11-8 20:53
因为scanf("%c", &c)每次值会从输入流中拿取一个字符,要是输入的是1010101010#,循环外面先拿一个,剩下的 ...
哦哦,那就是说scanf函数除了有输入进去的功能, 也有读取的功能吗 BngThea 发表于 2017-11-8 20:51
因为上面代码是通过一个一个字符的读取输入的内容,只有遇到#才应该结束读取
如果while循环中没有scanf, ...
那C语言里面scanf的功能也能读取吗?
以往都是给某个数赋值,也能读取吗 xq123456 发表于 2017-11-8 21:25
那C语言里面scanf的功能也能读取吗?
以往都是给某个数赋值,也能读取吗
scanf函数的功能就是将用户的额输入赋值到某个变量当中啊
比如scanf("%c", &c)
就是将用户输入的一个字符存放到c当中 xq123456 发表于 2017-11-8 21:23
哦哦,那就是说scanf函数除了有输入进去的功能, 也有读取的功能吗
输入的时候肯定是读取输入流再输入给某个变量呀。就像你写的,就是从输入流stdin中拿到一个,然后给变量c。对了,读取是不放回到输入流的,所以说是拿,不是读 你while里面的scanf是不是少了&呀??????
scanf("%c",&c);是只能输入一个字符,而不是字符串;
所以就算你一次在屏幕上输入了一个字符串,字符串也会待在缓冲区里面,而只有第一个字符被真正的读入。
你可以改成char data;scanf("%c",data);注意data前没有&;这样的话字符串就会被读入data; marszx 发表于 2017-11-15 17:14
你while里面的scanf是不是少了&呀??????
scanf("%c",&c);是只能输入一个字符,而不是字符串;
这样的话你可以不在while里面加scanf,但是判断条件改成for(int i=0;data != '#';i++)这样
页:
[1]