当前位置: 代码迷 >> C语言 >> [求助]关于SCANF的一个费解的问题.
  详细解决方案

[求助]关于SCANF的一个费解的问题.

热度:204   发布时间:2007-10-18 09:54:11.0
[求助]关于SCANF的一个费解的问题.

两段程序,大家可以复制下去执行一下:
程序一:
#include"stdio.h"
void main()
{ char a,b;
scanf("%c",&a);

while(a!='/')
{
printf("%c",a);
scanf("%c",&a);
}

getchar();
getchar();

}
程序二:
#include"stdio.h"
void main()
{ char a,b;
scanf("%c",&a);

while(a!='/')
{
printf("%c",a);

}

getchar();
getchar();

}
需要注意的是:转换字符为%c.单个字符.现在问题就出来了:
先执行程序二,如果执行时输入一个字符串,如ABCDF,则输出时只不停地输出A.后面的则不输出.这个好理解
但在程序一中,执行时,却能正常执行,即如果输入字符串ABCDF,则输出时能输出ABCDF.请问这是为什么呢?
请知道的给出详细的解答.谢谢.

搜索更多相关的解决方案: SCANF  

----------------解决方案--------------------------------------------------------
以下是引用monomania在2007-10-18 9:54:11的发言:

两段程序,大家可以复制下去执行一下:
程序一:
#include"stdio.h"
void main()
{ char a,b;
scanf("%c",&a);

while(a!='/')
{
printf("%c",a);
scanf("%c",&a);
}

getchar();
getchar();

}
程序二:
#include"stdio.h"
void main()
{ char a,b;
scanf("%c",&a);

while(a!='/')
{
printf("%c",a);

}


getchar();
getchar();

}
需要注意的是:转换字符为%c.单个字符.现在问题就出来了:
先执行程序二,如果执行时输入一个字符串,如ABCDF,则输出时只不停地输出A.后面的则不输出.这个好理解
但在程序一中,执行时,却能正常执行,即如果输入字符串ABCDF,则输出时能输出ABCDF.请问这是为什么呢?
请知道的给出详细的解答.谢谢.

第一个while 里面,打印一个然后又读入一个,当然可以一直打印了呀,但是一直不能退出循环,除非你输入‘/’
不知道lz哪里没明白


----------------解决方案--------------------------------------------------------
感谢.你说的逻辑我是清楚.但我不明白的是,进入WHILE循环以后,scanf函数是怎么样读入数据的?我想知道的是读入数据的具体过程,因为此前我并不知道scanf函数可以这么用.
盼回复..
谢谢
----------------解决方案--------------------------------------------------------

比如你输入了abcd然后敲了回车
首先当然是读入a 了,打印a以后
读入b,打印b
读入c,打印c
读入d,打印d
读入'\n',打印'\n'

然后等待继续输入

不知道你想要得是不是这个


----------------解决方案--------------------------------------------------------

这么看来,scanf 的作用应该就是将输入流中的字符按照转换字符的要求给读出来,比如%c就是将字符一个挨着一个读出来.
我的理解就是这样,不知道是不是准确的?


----------------解决方案--------------------------------------------------------
是这样的,我们通过键盘输入的时候,输入的内容会先放入缓冲区,

然后scanf从缓冲区读取,每次读取到有效的值,就会把读取的内容从缓冲区去除,

下次调用scanf时,如果缓冲区还有内容,就只会读缓冲区的内容,不会再要求输入。

使用fflush(stdin);语句可以清除缓冲区的内容
----------------解决方案--------------------------------------------------------
谢谢谢谢
以后还请多多指教.
----------------解决方案--------------------------------------------------------
小弟有个问题:a是char型,那么a也就只能存放一个字符。一次输入abcde,也就只读取a了,输出也就是a了。看怎么输出的是abcde呢?那个scanf是怎么读取输入字符的呢?   大虾们给指教下
----------------解决方案--------------------------------------------------------

用字符串

char a[20];
scanf("%s",a);
printf("%s\n",a);


----------------解决方案--------------------------------------------------------

读取字符的取决于转换格式符:
如scanf("%s",a);则是将输入的整串字符都读取.
如scanf("%c",a).则读取的是单个字符.


----------------解决方案--------------------------------------------------------
  相关解决方案