读书人

求教!为什么进入第二次循环scanf和

发布时间: 2012-04-11 17:42:33 作者: rapoo

求教!为什么进入第二次循环,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的返回值。

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

读书人网 >C语言

热点推荐