C语言gets()问题 50
这个程序是想判断是否是C语言合法标识符,可是gets函数在这里就像罢工似的,根本不执行,先输入样例个数(这是ACM入门题,所以会有这个要求),我一运行先输入3,还没等输入...
这个程序是想判断是否是C语言合法标识符,可是gets函数在这里就像罢工似的,根本不执行,先输入样例个数(这是ACM入门题,所以会有这个要求),我一运行先输入3,还没等输入字符串直接来个no,如果不是字符串带空格我才不用gets,最近用这个频繁出毛病,放在循环里也不能读多个字符串,代码如下。
展开
6个回答
展开全部
因为你在使用gets之前还使用过别的读入函数(或宏),有的是不会把末尾的换行读取掉的,就会留在缓冲区,当你调用gets时,把上一次的换行字符给读取了,所以就像直接跳过了。
改善的方法是为gets函数上一句加上getchar();用于吸收回车。或是加fflush(stdin);刷新缓冲区。
改善的方法是为gets函数上一句加上getchar();用于吸收回车。或是加fflush(stdin);刷新缓冲区。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到缓冲区后面的内存位置,这将破坏一个或多个不相关变量的值。
可能是buffer缓冲区不够大造成的,也或者异常终止是gets使用错误。
可能是buffer缓冲区不够大造成的,也或者异常终止是gets使用错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<ctype.h>
int main(void) {
char s[81];
int i,n,f;
scanf("%d",&n);
while(n--) {
fflush(stdin);
gets(s);
if(s[i] >= '0'&&s[i] <= '9') {
f = 0;
continue;
}
else {
for (i = 1; s[i]; ++i) {
if(isdigit(s[i])||isalpha(s[i])||(s[i] == '_')) f = 1;
else f = 0;
}
}
if(f) printf("YES\n");
else printf("NO\n");
}
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.gets是以回车为结尾的.
你在字符串中提前键入的回车
2.
是缓存区问题..
有可能是没有在gets
之前清空缓存区.
导致上文的输入被当作gets的了
你在字符串中提前键入的回车
2.
是缓存区问题..
有可能是没有在gets
之前清空缓存区.
导致上文的输入被当作gets的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
gets
和scanf混用时要在
scanf
后面加getchar
因为scanf
不接受回车和空格
所以要getchar过滤掉回车和空格
然后才能用gets来完整的接受
和scanf混用时要在
scanf
后面加getchar
因为scanf
不接受回车和空格
所以要getchar过滤掉回车和空格
然后才能用gets来完整的接受
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询