关于scanf()输入字符串的一点疑问

Dreamworker007 2012-06-30 10:54:25
char a[100];
while(scanf("%s ",a ) != EOF)
因为scanf("%s ") %s后面多了一个空格,程序输入一段字符串后然后还要再输入一个字符才能运行程序,这是什么原因造成的
好像输入非字符串数组就没有这个问题
...全文
220 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2012-07-06
  • 打赏
  • 举报
回复
scanf函数中的格式字符串是不能出现空格的,因为空格会使scanf函数提前进入下一个字符的输入.
疯疯癫癫 2012-07-03
  • 打赏
  • 举报
回复
+1 正解
[Quote=引用 1 楼 的回复:]
scanf("")中有什么就得输什么,比如scanf("%d,%d",&a,&b);这时在输入是,中间必须输入一个逗号,才能正常接受你所输入的两个数,所以上面的问题就很好理解了。
[/Quote]
逆道而行 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

char a[100];
while(scanf("%99[^\n]",a) != EOF)
[/Quote]
输入包含字符,后面无法继续输入。
输入存在输入缓冲区,从键盘读入数据时,数据走向:
键盘->键盘缓冲区->输入缓冲区->程序
当程序用scanf时,从输入缓冲区读数据,scanf("%d",&a)时,只能从输入缓冲区读走数字(0~9),遇到字母,字母不会被读走,因此如果是循环,后面的循环将不需要用户再输入

解决方法:scanf("%*[^\n]");// %*取走某些字符 ,例中表示取走所有非\n字符
scanf("%*c");//取走一个字符(余下的\n)
逆道而行 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

char a[100];
while(scanf("%99[^\n]",a) != EOF)
[/Quote]
输入包含字符,后面无法继续输入。
输入存在输入缓冲区,从键盘读入数据时,数据走向:
键盘->键盘缓冲区->输入缓冲区->程序
当程序用scanf时,从输入缓冲区读数据,scanf("%d",&a)时,只能从输入缓冲区读走数字(0~9),遇到字母,字母不会被读走,因此如果是循环,后面的循环将不需要用户再输入

解决方法:scanf("%*[^\n]");// %*取走某些字符 ,例中表示取走所有非\n字符
scanf("%*c");//取走一个字符(余下的\n)
赵4老师 2012-07-03
  • 打赏
  • 举报
回复
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) {
k=sscanf(p,"%d%n",&v,&n);
printf("k,v,n=%d,%d,%d\n",k,v,n);
if (1==k) {
p+=n;
} else if (0==k) {
printf("skip char[%c]\n",p[0]);
p++;
} else {//EOF==k
break;
}
}
printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
赵4老师 2012-07-03
  • 打赏
  • 举报
回复
char a[100];
while(scanf("%99[^\n]",a) != EOF)
westlife_2011 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
scanf("")中有什么就得输什么,比如scanf("%d,%d",&a,&b);这时在输入是,中间必须输入一个逗号,才能正常接受你所输入的两个数,所以上面的问题就很好理解了。
[/Quote]

准确无误!看楼主的结贴率我笑了
AnYidan 2012-07-03
  • 打赏
  • 举报
回复
scanf reads from stream under control of format, and assigns converted values through subsequent arguments, each of which must be a pointer.

It returns when format is exhausted.

fscanf returns EOF if end of file or an error occurs before
把握 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

人家scanf在期待一个空格, 可惜你始终没给人家输入, 人家只能告诉返回0, 告诉你我匹配不成.
[/Quote]
很赞成楼主
qq120848369 2012-07-02
  • 打赏
  • 举报
回复
人家scanf在期待一个空格, 可惜你始终没给人家输入, 人家只能告诉返回0, 告诉你我匹配不成.
jlfzhz 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

scanf("")中有什么就得输什么,比如scanf("%d,%d",&amp;a,&amp;b);这时在输入是,中间必须输入一个逗号,才能正常接受你所输入的两个数,所以上面的问题就很好理解了。

++
[/Quote]

good.
左眼看到鬼 2012-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

scanf("")中有什么就得输什么,比如scanf("%d,%d",&a,&b);这时在输入是,中间必须输入一个逗号,才能正常接受你所输入的两个数,所以上面的问题就很好理解了。
[/Quote]
++
Dreamworker007 2012-06-30
  • 打赏
  • 举报
回复
嗯 好像是这么回事...谢了
iaccepted 2012-06-30
  • 打赏
  • 举报
回复
scanf("")中有什么就得输什么,比如scanf("%d,%d",&a,&b);这时在输入是,中间必须输入一个逗号,才能正常接受你所输入的两个数,所以上面的问题就很好理解了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧