首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教!为什么进入第二次循环,scanf和gets是同时执行的?(新手刚学C)解决方案

2012-04-11 
求教!为什么进入第二次循环,scanf和gets是同时执行的?(新手刚学C)#include stdio.h#define MAX 100int m

求教!为什么进入第二次循环,scanf和gets是同时执行的?(新手刚学C)
#include <stdio.h>
#define MAX 100
int main()
{
  int i,n,ch = 1, flag = 1;
  char str[MAX];
  while(ch == 1){
  printf("\t\t请输入一串字符:");
  gets(str);
  for(i = 0; str[i] != '\0'; i++)
  ;
  for(n = 0; n < i; n++)
  if(str[n] != str[i-n-1])
  flag = 0;  
  if(flag == 1){
  printf("\n\n\t\t字符串:["); 
  printf("%s", str);
  printf("]是回文!");
  }else
  printf("\n\n\t\t字符串:[%s]不是回文!", str);
  printf("\n\n是否继续:1 是; 2 否 \n");
  printf("请选择:");
  scanf("%d", &ch);  
  }
  getch();
  return 0;
 }

[解决办法]

C/C++ code
}else{//缺了个{  printf("\n\n\t\t字符串:[%s]不是回文!", str);  printf("\n\n是否继续:1 是; 2 否 \n");  printf("请选择:");  scanf("%d", &ch);     }
[解决办法]
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
[解决办法]
哦,我看错了,呵呵。最好用插入源代码,那样有格式。
在scanf后加上一个getchar();获取'\n'
[解决办法]
探讨

哦,我看错了,呵呵。最好用插入源代码,那样有格式。
在scanf后加上一个getchar();获取'\n'

[解决办法]
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin) 原因为scanf的机制,它从来都是从输入缓冲区内读取数据,而不是从键盘!标准输入是从键盘输入到输入缓冲区中。当第一次调用scanf后,除了输入了正确的数据外,我们还输入了回车符,下一次调用scanf,会读取输入缓冲区内的回车符,而不会理睬你从键盘输入的数据(通常输入字符的话,你也输不了,它认为你输过了),所以错误!fflush(stdin)或rewind(stdin) 不过好像这种方法存在移值性问题!gcc 好像就不行!

探讨

引用:

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

不好意思,我看不懂...都没见过...

热点排行