真奇怪, 第四个scanf语句还没有执行程序就结束了

lettermail5 2003-09-04 05:06:56
真奇怪, 第四个scanf语句还没有执行程序就结束了
#include <stdio.h>
main()
{
int a,eee;
char b,d;
scanf("%c",&b);
scanf("%d",&a);

scanf("%c",&d);
scanf("%d",&eee);

}
...全文
137 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinajiji 2003-09-04
  • 打赏
  • 举报
回复
如果连续输入两个以上的十进制数,用空格分隔之.
如果连续输入两个以上的字符,不能用空格分隔,否则,空格将做为一个输入字符输入.
如果输入十制数与一个字符,不能用空格分隔之,否则,空格将做为一个输入字符输入.
如果输入一个字符与一个十进制数,字符与十进制数之间可加空格也可不加空格.
scanf(...)如果输入成功,返回输入成功并保存了的数据个数,如果输入不成功,比如将一个字符做为一个十进制数据输入,则返回0,并且这个字符将仍然保留在输入缓存中,可能做为下一个输入数据被读入.

#include <stdio.h>
#include <stdlib.h>

main()
{
int a = 999;
int eee =1000 ;
char b = 'a';
char d = 'b';
char e = 'e';

int sa = 555;
int seee = 666;
int sb = 777;
int sd = 888;
int se = 999;

sa = scanf("%c",&b);
printf("c = %c, ",b);
printf("sa = %d\n", sa);
sb = scanf("%d",&a);
printf("a = %d, ",a);
printf("sb = %d\n", sb);
sd = scanf("%c",&d);
printf("d = %c, ",d);
printf("sd = %d\n", sd);
seee = scanf("%d ",&eee);
printf("eee = %d, ",eee);
printf("seee = %d\n", seee);
se = scanf("%c", &e);
printf("e = %c,", e);
printf("se = %d\n", se);

system("pause");
}

A 10 B 11 //输入数据与格式.
c = A, sa = 1
a = 10, sb = 1
d = , sd = 1
eee = 1000, seee = 0
e = B,se = 1
请按任意键继续 . . .

A 10B11C //输入数据格式.
c = A, sa = 1
a = 10, sb = 1
d = B, sd = 1
eee = 11, seee = 1
e = C,se = 1
请按任意键继续 . . .

A10B11C
c = A, sa = 1
a = 10, sb = 1
d = B, sd = 1
eee = 11, seee = 1
e = C,se = 1
请按任意键继续 . . .
CreaTive1911 2003-09-04
  • 打赏
  • 举报
回复
大致错误引起的原因是因为scanf是从缓冲区读数据的,也许是因为第三个scanf语句结束后,缓冲区还有残余数据,你可以在第四个scanf语句后加个printf打印eee,看eee到底是什么
CreaTive1911 2003-09-04
  • 打赏
  • 举报
回复
我也碰见过类似的问题,不过后来是怎么修改好的自己也忘记了,hehe
liuyuw 2003-09-04
  • 打赏
  • 举报
回复
两下回车会自动退出
lth_81 2003-09-04
  • 打赏
  • 举报
回复
你一定是敲了回车。。最后一个scanf接受的是回车。
myyan 2003-09-04
  • 打赏
  • 举报
回复
加上空格后,会忽略字符前面的空格等。
myyan 2003-09-04
  • 打赏
  • 举报
回复
例如:
char b,d;
scanf(" %c",&b);
scanf(" %d",&a);

scanf(" %c",&d);
scanf(" %d",&eee);
因为,你输入的时候,会把你敲的回车算进去。
myyan 2003-09-04
  • 打赏
  • 举报
回复
输入的时候在%和前面的“之间加上空格.OK!!!!!!!
lettermail5 2003-09-04
  • 打赏
  • 举报
回复
多谢楼上指点
我分开写有罪吗?
问题总是搞得清楚点好吧
tonybaobao 2003-09-04
  • 打赏
  • 举报
回复
你写一起呀
scanf("%d %d %d %c",&a,&b,&c,&d);
lettermail5 2003-09-04
  • 打赏
  • 举报
回复
各位大侠, 看来不是这样的原因
上面的方法都试过
若按二楼的方法, 表面上输入没有错, 因为刚才的语句没有输出语句, 所以看不到错误, 当我加上输出语句后, 实质是二楼的方法也是错误的。
大家请不啬指教啊
#include <stdio.h>
main()
{
int a,eee;
char b,d;
scanf("%c",&b);
scanf("%d",&a);

scanf("%c",&d);
scanf("%d ",&eee);
printf("%c",b);
printf("%d",a);
printf("%c",d);
printf("%d",eee);

}
bigbigbigsoft 2003-09-04
  • 打赏
  • 举报
回复
最后一个改成:scanf("%d ",&eee);后面增加空格
rtdb 2003-09-04
  • 打赏
  • 举报
回复
你这样输入:
a 2 b 3

不要输入一个数后就输入回车,
否则回车会被当字符读进去。
gdjxlhc 2003-09-04
  • 打赏
  • 举报
回复
依我理解,该程序都执行啦,只是上面的scanf语句在执行时要求用户输入数并回车结束一个录入,但回车符给当作另一个录入数传到第二个scanf中去,你试试在每个scanf后加入
getch();来接收回车符。。。。
rtdb 2003-09-04
  • 打赏
  • 举报
回复
你这样输入:
a 2 b 3

不要输入一个数后就输入回车,
否则回车会被当字符读进去。
xiachuankai 2003-09-04
  • 打赏
  • 举报
回复
可能因为你的第一个数输入以后,敲入了回车键。然后第二个输入语句就接收了这个回车,就结束了。你用空格试试。或者用一个语句吃掉缓冲区的回车键。好象是 ignore();

69,371

社区成员

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

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