c语言中循环输入几组数据的问题!!

ztianshan 2008-05-06 09:58:21
要把这样一组数据输入,再处理

操作 页号 页内地址
+ 0 72
+ 1 50
* 2 15
save 3 26
.............

我写的读取数据的部分是这样的:
#include "stdio.h"
#include "string.h"

int main()
{
while(1){
char buf[5];
int e1, e2;


printf("\n操作:");
fgets(buf, 5, stdin); //这里有问题吗???

if( !strcmp(buf, "save")){
printf("save\n");
}
printf("页号:");
scanf("%d", &e1);
printf("页内地址:");
scanf("%d", &e2);
}
}

运行的结果是:
操作:+
页号:0
页内地址:72

操作:页号:
//这里就不能输入“操作”!!!!


问题是从第2次循环开始就出现问题了,始终不能读取“操作”,程序自动的就从这行跳过!!不知道为什么??
...全文
450 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
x86 2008-05-08
  • 打赏
  • 举报
回复
scanf没有读最后的回车,结果又被fgets读到了,你可以将fgets的结果打印出来,可以看出是一个回车。
scanf设计就是这样的,你可以在之后紧接着加一条getchar():
printf("页号:");
scanf("%d", &e1);
printf("页内地址:");
scanf("%d", &e2);
getchar();

那个fflush只是针对输出型的stream,对stdin不起作用。至于VC,可能scanf的实现不同。
ztianshan 2008-05-06
  • 打赏
  • 举报
回复
是啊!! 我在openSUSE Linux 下的GCC 不过学校机房里的是VC 我在看看!!
effective_person 2008-05-06
  • 打赏
  • 举报
回复
我运行成功了啊!
可以啊
我用的是 vc6.0
ztianshan 2008-05-06
  • 打赏
  • 举报
回复
还是那样的结果啊!!!
你运行 成功了吗??
effective_person 2008-05-06
  • 打赏
  • 举报
回复

fflush(stdin);// here 要清理输入的缓冲区,要不然下次输入就会出现你这样的错误

effective_person 2008-05-06
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main()
{
while(1){
char buf[5];
int e1, e2;


printf("\n操作:");
fgets(buf, 5, stdin); //这里有问题吗???

if( !strcmp(buf, "save")){
printf("save\n");
}
printf("页号:");
scanf("%d", &e1);
printf("页内地址:");
scanf("%d", &e2);
fflush(stdin);// here
}
return 1;
}

69,369

社区成员

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

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