scanf()后用gets()出现跳过……求详细的解释…… C语言中scanf后接gets的问题。

gets()\u51fd\u6570\u6ca1\u6709\u6267\u884c\uff0c\u76f4\u63a5\u8df3\u8fc7\u4e86\uff01\u6c42\u89e3\u91ca\uff01

\u4e0d\u662f\u88ab\u8df3\u8fc7\u4e86\uff0c\u56e0\u4e3a\u4f60\u5728\u8f93\u5165y\u4e4b\u540e\u6309\u4e86\u4e00\u4e0b\u56de\u8f66\uff0cgets()\u51fd\u6570\u5c06\u56de\u8f66\u5f53\u6210\u8f93\u5165\u7ed9\u63a5\u6536\u4e86\uff0c\u6240\u4ee5\u4f1a\u51fa\u73b0\u8fd9\u6837\u7684\u95ee\u9898\uff0c\u53ea\u9700\u8981\u5728gets(a)\u524d\u9762\u52a0\u4e0a\u4e00\u4e2agetchar()\u5373\u53ef\uff0c\u6e90\u4ee3\u7801\u5982\u4e0b\uff1a
#include
#include
#include
int is_within(char a[],char *b);
int main()
{
char a[50]={0};
char b[50]={0};
char pd='y';
int n=0;
while((tolower(pd)=='y'))
{
printf("\u8bf7\u8f93\u5165\u7b2c\u4e00\u4e2a\u5b57\u7b26\u4e32\uff01\n");
getchar();
gets(a); //\u5728\u7b2c\u4e8c\u6b21\u5faa\u73af\u7684\u65f6\u5019\u76f4\u63a5\u8df3\u8fc7\uff0c\u6ca1\u6709\u88ab\u6267\u884c\u5230\uff01
printf("\u8bf7\u8f93\u5165\u7b2c\u4e8c\u4e2a\u5b57\u7b26\u4e32\uff01\n");
gets(b);
n=is_within(a,b);
if(n==1)
{
printf("\u627e\u5230\uff01");
}
else
{
printf("\u6ca1\u6709\u627e\u5230\uff01");
}
printf("\u662f\u5426\u7ee7\u7eed\uff08y/n\uff09?\n");
//scanf("%c",&pd);
pd=getchar();
}
return 0;
}
is_within(char a[],char *b)
{
int i=0;
int m=0;
while(a[i]!='\0')
{
for(m=0;;)
{
if(a[i+m]==*(b+m))
{
m++;
//*b++;
if(*(b+m+1)=='\0')
{
return 1;
}
}
else
break;
}
i++;
}
return 0;
}
\u6211\u5df2\u7ecf\u6d4b\u8bd5\u4e86\uff0c\u5982\u679c\u8fd8\u6709\u5176\u4ed6\u95ee\u9898\u8bf7\u8ffd\u95ee

scanf()\u51fd\u6570\u63a5\u53d7\u8f93\u5165\u4ee5\u540e\uff0c\u56de\u8f66\u88ab\u4fdd\u5b58\u5728\u8f93\u5165\u6d41\u4e2d\u4e86\uff0c\u4f60\u5728scanf()\u540e\u9762\u52a0\u4e00\u4e2agetchar()\u5c31\u597d\u4e86\u3002 \u8fd9\u6837\u4f1a\u5403\u6389\u591a\u4f59\u7684\u56de\u8f66\u7b26\uff0c\u540e\u9762\u7684gets()\u5c31\u53ef\u4ee5\u63a5\u53d7\u8f93\u5165\u4e86\u3002

缓冲区里保留所有从键盘打入的键,包括空格,空白键,回车。
输入语句 scanf(),gets(), ...都是到 缓冲区 里 按语法规则 读东西,转换内容。
当 缓冲区 里 内容 用完了,或不够 输入语句 用 时,输入语句 等待....。

从键盘打入的东西,只有当遇到 Enter 键 时,才 通过 操作系统 进 缓冲区,没遇到 Enter 键不进 (或者说scanf(),gets(), 等语句,没遇到 Enter 键输入事件发生时,不开始工作)。

空白和回车何时被用掉与读语句种类和读法读的格式有关。
gets() 是读一行字符串,包括在前在后在半当中的 空格,空白,....
scanf("%d",&k); 和 scanf("%d\n",&k); 不同。后者可以吃掉一个 Enter 键。

简单保险的办法是用 fflush(stdin); 清除 输入缓冲区。你就 不用担心 输入行 残留 的数字,字符,空白和Enter 键:
scanf(。。。); fflush(stdin); 再 gets();

其实不是故意把回车留住,每一个字符输入字符输入之后都会进入一个缓冲区,回车也是字符,就是ASCII码,getchar就是接受一个字符,自然可以接收回车的输入

  • c璇█scanf gets闂
    绛旓細scanf鐨%s鏍煎紡鎺ユ敹瀛楃涓叉椂锛屼互绌烘牸鎴栧洖杞︿綔涓虹粓姝㈢銆傝gets鍙互鍥炶溅浣滀负缁堟绗︺備綘杩欓噷s1==aaa s2==bbb s3=ccc ddd鎵浠ヨ緭鍑轰細杩欐牱 puts杈撳畬鏈鍚庤緭鍑'\n'锛屽氨鏄崲琛
  • c璇█gets()鐨勭敤娉曟槸浠涔?
    绛旓細include <stdio.h> char *gets(char *str);杩欎釜鍑芥暟寰堢畝鍗曪紝鍙湁涓涓弬鏁般傚弬鏁扮被鍨嬩负 char* 鍨嬶紝鍗 str 鍙互鏄竴涓瓧绗︽寚閽堝彉閲忓悕锛屼篃鍙互鏄竴涓瓧绗︽暟缁勫悕銆gets() 鍑芥暟鐨勫姛鑳芥槸浠庤緭鍏ョ紦鍐插尯涓鍙栦竴涓瓧绗︿覆瀛樺偍鍒板瓧绗︽寚閽堝彉閲 str 鎵鎸囧悜鐨勫唴瀛樼┖闂淬備笅闈㈠皢鍓嶉潰涓浣跨敤 scanf 杈撳叆瀛楃涓茬殑绋嬪簭...
  • gets鍑芥暟鏈夊嵄闄,閭d箞璇彞gets(s);鎬庝箞鐢scanf鍑芥暟鏀瑰啓鍛?
    绛旓細c2闇杈撳叆銆俿canf 锛氬綋閬囧埌鍥炶溅锛岀┖鏍煎拰 tab閿 浼氳嚜鍔ㄥ湪瀛楃涓鍚庨潰娣诲姞'\0'锛屼絾鏄洖杞︼紝绌烘牸鍜宼ab閿粛浼氱暀鍦ㄨ緭鍏ョ殑缂撳啿鍖轰腑銆俫ets锛氬彲鎺ュ彈 鍥炶溅閿 涔嬪墠杈撳叆鐨勬墍鏈夊瓧绗︼紝骞剁敤'\n'鏇夸唬 '\0'.鍥炶溅閿笉浼氱暀鍦ㄨ緭鍏ョ紦鍐插尯涓 gets()鐢鍒拌鍙栧瓧绗︿覆锛岀敤鍥炶溅缁撴潫杈撳叆 scanf()鍙互璇诲彇鎵鏈夌被鍨嬬殑鍙橀噺 ...
  • c璇█涓,杈撳叆涓涓瓧绗︿覆浣跨敤scanf(鈥%s鈥)鍜gets()鏈変粈涔堝尯鍒
    绛旓細gets(str);浠栦滑閮藉彲浠ヨ繖鏍疯緭鍑猴細printf("%s",str);鎴栬卲uts(str);娉ㄦ剰锛(1)浣跨敤scanf杈撳叆瀛楃涓蹭竴瀹氫笉鑳藉啓鎴愨scanf("%s",&str);鈥濓紝鍥犱负str鏄暟缁勫悕锛屼綔涓轰竴涓湴鍧瀛樺湪锛屾槸涓嶈兘鍐嶈繘琛屸&鈥濊繍绠楃殑銆(2)gets();鍜宲uts();涓娆″彧鑳借緭鍏ヤ竴涓瓧绗︽暟缁勶紝姣斿鍐欐垚鈥済ets(str1,str2);鈥濊屾兂涓娆...
  • 鐢scanf("%s",s)璇诲叆瀛楃涓叉椂浼氭妸\n浣滀负瀛楃涓插唴瀹瑰悧? 鐢╣ets()鍛?
    绛旓細涓嶄細銆scanf("%s",s) 鎶奬n浣滀负绌虹櫧锛屽綋鍒嗛殧绗﹀鐞嗭紝涓嶄綔涓哄瓧绗︿覆鍐呭銆gets() 璇诲叆涓琛岋紝涓㈠純\n, 涓嶆妸\n 涓嶄綔涓 瀛楃涓插唴瀹广俧gets ( s, len, stdin); 浠庢爣鍑嗚緭鍏tdin璇诲叆涓琛岋紝鎶奬n 浣滀负 瀛楃涓插唴瀹癸紒
  • gets涓scanf鐨勫啿绐
    绛旓細scanf涓嶈'\n'锛屾墍浠canf鐜╀簡浠ュ悗'\n'杩樺湪缂撳啿鍖洪噷锛岃実ets鍒欐槸浠'\n'涓虹粨鏉熸爣蹇楋紝瀹冪湅鍒'\n'灏辨妸瀹冪棝蹇湴璇绘帀浜嗭紝鍏跺疄浠涔堥兘娌¤鍒帮紝瑙e喅鏂规硶锛歮ain(){ int n;char str[32];scanf("%d",&n);while(getchar()!='\n'); // 娓呯紦鍐 gets(str);...} ...
  • 濡傛湁瀹氫箟char *sp;浣跨敤璇彞scanf("%s",sp);鎴gets(sp);鏈夐棶棰樺悧
    绛旓細鏈夐棶棰.搴旇杩欐牱锛歝har *sp锛泂p= new char[12];//蹇呴』鍏堝垎閰嶇┖闂 鐒跺悗浣跨敤璇彞scanf("%s",sp);鎴gets(sp);sp杩欎釜鍙橀噺鏄瓨鍌ㄥ湪鏍堜腑鐨勶紝鍗犲洓涓瓧鑺 鑰宻p鎸囧悜浜嗗爢涓竴涓ぇ灏忎负12瀛楄妭鐨勫湴鍧绌洪棿銆
  • c璇█,scanf%s鍜gets,涓嶆槸娌″尯鍒悧?
    绛旓細浠庡姛鑳戒笂鍙互鐪嬪嚭涓嶅悓涔嬪锛1 缁堟鏉′欢涓嶅悓銆俫ets鍙湁閬囧埌\n鏃舵墠浼氱粨鏉熻緭鍏ワ紝鑰scanf閬囧埌绌烘牸鎴栧埗琛ㄧ鏃讹紝涔熶細缁撴潫杈撳叆銆傛瘮濡傝緭鍏"test string\n"銆鐢╣ets寰楀埌鐨勫瓧绗︿覆涓"test string", 浜岀敤scanf寰楀埌鐨勬槸"test"銆2 缁堟鍚庯紝瀵圭粓姝㈠瓧绗﹀鐞嗕笉鍚屻傛瘮濡傝緭鍏ヤ负"test\nabcd"銆傛墽琛実ets鍚庯紝\n涓嶄細鐣欏湪...
  • getchar() 鍜 gets() 鍑芥暟涓轰粈涔堣涓璧风敤??
    绛旓細杩欓噷getchar鏄鐞 鍓嶉潰杈撳叆鍙风爜鍚庣殑鍥炶溅绗︾殑闂銆傚鏋滄病鏈夎繖涓猤etchar锛岄偅scanf鍚锛屼細鏈変竴涓洖杞︾瀛樺湪杈撳叆娴佺殑缂撳啿鍖哄唴锛岄偅涔堝啀浣跨敤gets鐨勬椂鍊欙紝灏变細鍙栧緱杩欎釜鍥炶溅绗︼紝gets璁や负杈撳叆缁撴潫锛屽氨涓嶄細璁╃敤鎴疯緭鍏ュ鍚嶄簡銆
  • c璇█scanf 鍜gets瀵瑰瓧绗︿覆鐨勮緭鍏
    绛旓細鍦ㄨ繖娈电畝鍗曠殑绋嬪簭涓紝浼氬嚭鐜扮殑鏄棶棰樺湪gets(str);澶勩傚綋鐢scanf("%s",str);鏉ヨ幏鍙栬繖娈佃嫳鏂囨枃瀛楃殑鏃跺欙紝杈撳嚭浼氬湪绗竴涓┖鏍肩殑鍦版柟绋嬪簭缁撴潫锛屽涓嬪浘锛氳浣跨敤gets()鏃朵笉浼氬嚭鐜拌繖绉嶆儏鍐碉紝鍙互鎶婄┖鏍涔嬪悗鐨勫瓧绗︿篃閮芥甯歌緭鍑烘潵銆傜涓娆¤緭鍏ello world!鍚庯紝瀛楃涓睭ello world!閮戒細琚鍒拌緭鍏ョ紦鍐插尯涓紝...
  • 扩展阅读:static int ... printf ... scanf gets getchar ... sst ... putchar ... 5个例子搞懂scanf ... int ... getchar 的用法 ... c语言scanf用法举例 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网