有关C语言中字符串输入及循环语句问题
#include<string.h>#include<stdio.h>voidmain(){chara,str[80];inti,j=0;printf("请输入一个字母:...
#include <string.h>#include <stdio.h> void main( ) { char a,str[80]; int i,j=0; printf("请输入一个字母:\n"); a=getchar(); printf("请输入一个字符串:\n"); gets(str); for(i=0;i<80;i++) { if(!strcmp(&a,&str[i])) j++; else continue; } printf("在字符串中与%c相同的字母有%d个!",a,j); }为什么还没有输入字符串程序就自己就结束了?
展开
展开全部
你的问题应该跟这个问题是一样的,
详见:http://zhidao.baidu.com/question/2074964060003873148
都是在接收键盘输入后没有清键盘缓存区。
每次输入后,按下回车键,会有对应的0x10(换行),0x13(回车)两个ASCII字符也进入键盘缓冲区,所以下一个键盘扫描函数扫描输入字符时,0x10字符等从键盘的缓存区进入,被输入扫描函数当做输入字符串赋值给字符串变量。故程序继续往下执行了,而不是该输入操作没有执行。
更改措施:每次scanf后对键盘缓存区做清缓存动作,如fflush(stdin)等,即可避免此问题发生
相关部分改为:
a=getchar();
fflush(stdin); //增加一个清缓存动作
printf("请输入一个字符串:\n");
gets(str);
。。。
应可处理此问题。
详见:http://zhidao.baidu.com/question/2074964060003873148
都是在接收键盘输入后没有清键盘缓存区。
每次输入后,按下回车键,会有对应的0x10(换行),0x13(回车)两个ASCII字符也进入键盘缓冲区,所以下一个键盘扫描函数扫描输入字符时,0x10字符等从键盘的缓存区进入,被输入扫描函数当做输入字符串赋值给字符串变量。故程序继续往下执行了,而不是该输入操作没有执行。
更改措施:每次scanf后对键盘缓存区做清缓存动作,如fflush(stdin)等,即可避免此问题发生
相关部分改为:
a=getchar();
fflush(stdin); //增加一个清缓存动作
printf("请输入一个字符串:\n");
gets(str);
。。。
应可处理此问题。
追问
没有学请缓存动作。。。另外这句话“每次输入后,按下回车键,会有对应的0x10(换行),0x13(回车)两个ASCII字符也进入键盘缓冲区,”是什么意思,不理解。。。智商拙计啊
追答
就是说每次键盘输入后,按下回车键,
则会有0x10(换行),0x13(回车)两个ASCII字符存入键盘缓存区最后边位置。
而getchar();函数只取走前边输入的字符,
所以0x10(换行),0x13(回车)两个ASCII字符码保留在键盘的缓存区,
下次再调用gets(str);函数,就把0x10(换行),当做新的输入取走了。
这个时候,就需要清(消耗)缓存区来避免这种误判。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询