请教三种字符串输入的方法的比较和区别

来源:百度知道 编辑:UC知道 时间:2024/06/05 16:23:03
字符串输入我知道的三种方法是:
char a[10];
gets(a);
scanf("%[^\n]s",a);
scanf("%s",a);
昨天在赛扬566Mhz cpu上的tc3上运行了一下,发现原来三个是有区别的,本来还没有发现。我用了一个goto的语句后三者的区别就显出来了,但是我自己还是有点搞不太清楚,觉得有点瞎蒙蒙上的。
请教大虾,帮小弟比较一下这三种输入法,谢谢了。
main()
{
char a[105],b[105];
char c[5],d[5];
int i,n;
back:
printf("Please input a sentence:\n");
@@@ gets(a); @@@
if(strcmp(a,"'exit")==0)
return;
if(strlen(a)>100)
printf("ERROR:\nThe order is wrong!\n");
else
{
printf("Please input the letter you want to delete:\n");
@@@ gets(c); @@@
if(strcmp(c,"exit")==0)
return;
if(strcmp(c,"back")==0)
goto back;
else
{
if(strlen(c)>1)
printf("ERROR:\nThe order is wrong!\nYou can only input one letter!\n");
else
{
f

gets(a)和scanf ("%[^\n]", a)的差别不大,都可以读入一行字符串,例如:
Hi Hello
就可以全部读入。
但scanf ("%s", a)是读到空格停止。用这一句来读上面的字符串,则只读入Hi。

那你说一下你发现的区别?

对了,scanf("%[^\n]s", a);和gets(a)还是有一点区别,sanf("%[^\n]s", a)在读到回车符(\n)的时候,把回车符留在输入缓冲区,也就是说,那个回车符并没有读入,所以后面用scanf("%[^\n]s", c)时,就直接又读到了之前留下的回车符,导致c中并没有存入任何数据(这一点可以通过如下手段证明:在scanf("%[^\n]s", a)的下面加上一个scanf ("%c", &d[0]),则程序运行正常了,说明scanf()读了以后,留下了回车符\n),但gets(a)是连回车符一起读入,输入缓冲区没有留下任何字符,所以后面不论再用scanf("%[^\n]s", c)还是gets(c),都不会出错。

谢谢你,我以前也没有注意到这个问题。。。

若你想要a[10]="Hello Hi"
前两种能输入完整的字符串,包括你想要的空格,第三种是以第一个空格为结束符,得不到后面的字符。
和楼上一个道理!