c语言中,输入一个字符串使用scanf(”%s”)和gets()有什么区别 C语言用scanf和gets读取字符串有什么区别?
c\u8bed\u8a00\u4e2dgets\u51fd\u6570\u548c\u662fscanf\u51fd\u6570\u6709\u4ec0\u4e48\u533a\u522b\u5462\uff1f\uff1f\u4e00\u3001\u6307\u4ee3\u4e0d\u540c
1\u3001scanf\uff1a\u662fC\u8bed\u8a00\u4e2d\u7684\u4e00\u4e2a\u8f93\u5165\u51fd\u6570\u3002
2\u3001gets\uff1a\u4ece\u6807\u51c6\u8f93\u5165\u8bbe\u5907\u8bfb\u5b57\u7b26\u4e32\u51fd\u6570\u3002
\u4e8c\u3001\u8bfb\u53d6\u65b9\u5f0f\u4e0d\u540c
1\u3001scanf\uff1a\u662f\u683c\u5f0f\u8f93\u5165\u51fd\u6570\uff0c\u5373\u6309\u7528\u6237\u6307\u5b9a\u7684\u683c\u5f0f\u4ece\u952e\u76d8\u4e0a\u628a\u6570\u636e\u8f93\u5165\u5230\u6307\u5b9a\u7684\u53d8\u91cf\u4e4b\u4e2d\u3002
2\u3001gets\uff1a\u53ef\u4ee5\u65e0\u9650\u8bfb\u53d6\uff0c\u4e0d\u4f1a\u5224\u65ad\u4e0a\u9650\uff0c\u4ee5\u56de\u8f66\u7ed3\u675f\u8bfb\u53d6\uff0c\u6240\u4ee5\u7a0b\u5e8f\u5458\u5e94\u8be5\u786e\u4fddbuffer\u7684\u7a7a\u95f4\u8db3\u591f\u5927\uff0c\u4ee5\u4fbf\u5728\u6267\u884c\u8bfb\u64cd\u4f5c\u65f6\u4e0d\u53d1\u751f\u6ea2\u51fa\u3002
\u4e09\u3001\u6570\u636e\u6d41\u5411\u4e0d\u540c
1\u3001scanf\uff1a\u51fd\u6570 scanf() \u662f\u4ece\u6807\u51c6\u8f93\u5165\u6d41stdin (\u6807\u51c6\u8f93\u5165\u8bbe\u5907\uff0c\u6307\u5411\u952e\u76d8)\u4e2d\u8bfb\u5185\u5bb9\u7684\u901a\u7528\u5b50\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u8bf4\u660e\u7684\u683c\u5f0f\u8bfb\u5165\u591a\u4e2a\u5b57\u7b26\uff0c\u5e76\u4fdd\u5b58\u5728\u5bf9\u5e94\u5730\u5740\u7684\u53d8\u91cf\u4e2d\u3002
2\u3001gets\uff1a\u4ecestdin\u6d41\u4e2d\u8bfb\u53d6\u5b57\u7b26\u4e32\uff0c\u76f4\u81f3\u63a5\u53d7\u5230\u6362\u884c\u7b26\u6216EOF\u65f6\u505c\u6b62\uff0c\u5e76\u5c06\u8bfb\u53d6\u7684\u7ed3\u679c\u5b58\u653e\u5728buffer\u6307\u9488\u6240\u6307\u5411\u7684\u5b57\u7b26\u6570\u7ec4\u4e2d\u3002\u6362\u884c\u7b26\u4e0d\u4f5c\u4e3a\u8bfb\u53d6\u4e32\u7684\u5185\u5bb9\uff0c\u8bfb\u53d6\u7684\u6362\u884c\u7b26\u88ab\u8f6c\u6362\u4e3a\u2018\0\u2019\u7a7a\u5b57\u7b26\uff0c\u5e76\u7531\u6b64\u6765\u7ed3\u675f\u5b57\u7b26\u4e32\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-gets
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-scanf
gets \u5b57\u7b26\u4e32\u4e2d\u53ef\u4ee5\u6709\u7a7a\u767d\u7b26\u53f7,\u9047\u5230\u56de\u8f66\u7ec8\u6b62\u8f93\u5165\u3002 scanf("%s")\u9047\u5230\u7b2c\u4e00\u4e2a\u7a7a\u767d\u7b26\u53f7\u6216\u8005\u56de\u8f66\u505c\u6b62\u8f93\u5165
其实用scanf("%s",);和gets();本质上没有什么区别,都是将字符数据输入到制定的内存单元中。假设定义有字符数组(C语言把字符串按字符数组处理)str[30],那么我们向里面输入字符就可以为:
scanf("%s",str);
gets(str);
他们都可以这样输出:
printf("%s",str);
或者puts(str);
注意:
(1)使用scanf输入字符串一定不能写成“scanf("%s",&str);”,因为str是数组名,作为一个地址存在,是不能再进行“&”运算的。
(2)gets();和puts();一次只能输入一个字符数组,比如写成“gets(str1,str2);”而想一次输入两个字符串,那是不行的。
scanf函数只能输入不带空格的字符串,因为它读入到空格时就结束了。而gets函数可以读入带空格的字符串。例如:
#include <stdio.h>
int main()
{
char s[100];
scanf("%s",s);
printf("%s\n",s);
gets(s);
printf("%s\n",s);
return 0;
}
两次输入,都输入字符串"ab cd",输出却不一样:第一次输出ab,因为scanf遇到空格时停止读入,第二次输出ab cd,因为gets函数是以换行符为结束标志的。
%s遇到空格就停止读入了,gets是遇到回车是才停止读入,gets能获取空格,%s不能
%s遇空格或回车停止,gets遇回车才停
绛旓細printf("%s", s);}
绛旓細include <stdlib.h> include<string.h> char str[10] = "111222333";// 瀛楃涓叉浛鎹(婧瀛楃涓, 鏃у瓧绗︿覆, 鏂板瓧绗︿覆)char *strReplace(char *src, const char *oldstr, const char *newstr, int len){ char *needle;char *tmp;if (strlen(oldstr) == strlen(newstr) && strcmp(oldstr...
绛旓細杩欏彞璇濈殑鎰忔濇槸锛鏍煎紡瀛楃s锛屽彧閽堝浠 '\0' 缁撳熬鐨勫瓧绗︿覆鎵嶈兘姝g‘宸ヤ綔锛屽惁鍒欎細鍥犱负鏃犳硶鍒ゆ柇瀛楃涓查暱搴﹁屽鑷村悇绉嶉敊璇銆備緥濡傦細const char szStr[] = {'h','e','l','l','o'};杩欎釜瀛楃涓瞫zStr涓嶈兘閫氳繃鏍煎紡瀛楃s 姝e父杈撳嚭锛屽嵆浣胯緭鍑烘纭粨鏋溾渉ello鈥濓紝涔熷彧鏄宸х粨灏炬湁涓0鑰屽凡銆俢onst char sz...
绛旓細鍏跺疄鐢╯canf("%s",);鍜実ets();鏈川涓婃病鏈変粈涔堝尯鍒紝閮芥槸灏嗗瓧绗︽暟鎹緭鍏ュ埌鍒跺畾鐨勫唴瀛樺崟鍏冧腑銆傚亣璁惧畾涔夋湁瀛楃鏁扮粍锛C璇█鎶瀛楃涓鎸夊瓧绗︽暟缁勫鐞嗭級str[30]锛岄偅涔堟垜浠悜閲岄潰杈撳叆瀛楃灏卞彲浠ヤ负锛歴canf("%s",str);gets(str);浠栦滑閮藉彲浠ヨ繖鏍疯緭鍑猴細printf("%s",str);鎴栬卲uts(str);娉ㄦ剰锛(1)浣跨敤scanf...
绛旓細1銆佽祴鍊 c杈撳叆鍑芥暟鍙細瀵逛竴涓瓧鑺傜┖闂磋祴鍊硷紝鑰%s浼氫竴鐩磋祴鍊硷紝鐩村埌杈撳叆涓亣鍒扮┖鐧藉瓧绗︿负姝2銆佸湴鍧绗 杈撳叆鐨勬椂鍊檚canf("%c", &a)锛涜繖閲岀殑&涓嶈兘灏戯紝鑰宻canf("%s",s)锛涜繖閲屼笉鑳芥湁&绗﹀彿銆傝緭鍑猴細1銆侀暱搴 c鍙兘杈撳嚭涓涓瓧绗︼紝%s杈撳嚭鐨勬槸涓涓插瓧绗︼紝鐩村埌鏌愪竴涓瓧鑺傚唴瀛樼殑鍏冪礌涓哄瓧绗'\0'鏃讹紝杈撳嚭姝...
绛旓細闇瑕佸噯澶囩殑鏉愭枡鍒嗗埆鏈夛細鐢佃剳銆丆璇█缂栬瘧鍣ㄣ1銆侀鍏堬紝鎵撳紑C璇█缂栬瘧鍣紝鏂板缓涓涓鍒濆.cpp鏂囦欢锛屼緥濡傦細test.cpp銆2銆佸湪test.cpp鏂囦欢涓紝杈撳叆C璇█浠g爜锛歝har *a = "hello";printf("%s", a); 銆3銆佺紪璇戝櫒杩愯test.cpp鏂囦欢锛屾鏃舵垚鍔熼氳繃%s杈撳嚭浜瀛楃涓銆
绛旓細缁撹锛氬湪C璇█涓紝瀛楃涓鐨杈撳叆鍙互閫氳繃scanf鍑芥暟瀹炵幇锛岀畝鍖栨柟寮忔槸浣跨敤scanf("%s", a);锛屾棤闇閰嶅悎for璇彞銆傝繖閲岋紝"a"鏄涓涓棰勫畾涔夌殑瀛楃鏁扮粍锛屽char a[50]銆俫ets鍑芥暟鍙互璇诲彇鐢ㄦ埛杈撳叆鐩村埌閬囧埌鎹㈣绗︼紝鑰宲uts鍑芥暟鍒欑敤浜庤緭鍑哄瓧绗︿覆銆傝緭鍏ヨ緭鍑烘搷浣滀腑锛宻canf鍜宲rintf鏄父鐢ㄥ伐鍏凤紝瀹冧滑鏀寔澶氱鏁版嵁绫诲瀷鐨...
绛旓細C璇█涓瓧绗︿覆鐨勮緭鍏ュ拰杈撳嚭涓昏鏈変袱绉嶆柟寮忥細杈撳叆浣跨敤锛歴canf("%s",a);瀵瑰簲鐨勮緭鍑轰娇鐢細printf("%s\n",a);杈撳叆浣跨敤锛歡ets(b);瀵瑰簲鐨勮緭鍑轰娇鐢細puts(b);瀛楃涓叉垨涓(String)鏄敱鏁板瓧銆佸瓧姣嶃佷笅鍒掔嚎缁勬垚鐨勪竴涓插瓧绗銆備竴鑸涓 s="a1a2路路路an"(n>=0)銆傚畠鏄紪绋嬭瑷涓〃绀烘枃鏈殑鏁版嵁绫诲瀷銆傚湪...
绛旓細鍦C璇█涓緭鍏ュ瓧绗︿覆鍚庣劧鍚庢墦鍗板嚭鏉ョ殑缂栫▼鏂规硶濡備笅锛1.棣栧厛闇瑕佸厛瀹氫箟涓涓瀛樻斁瀛楃涓茬殑鏁扮粍绌洪棿锛屽缁欏瓧绗︿覆100涓暟缁勭┖闂淬2.鎺ョ潃浣跨敤gets()鍑芥暟鏉ヨ幏鍙栭敭鐩樿緭鍏ョ殑瀛楃涓层備竴鑸牸寮忎负gets(瀹氫箟鐨勫瓧绗︽暟缁勫悕)銆3.鐒跺悗鍐嶄娇鐢╬uts()鍑芥暟鏉ヨ緭鍑轰箣鍓嶈緭鍏ョ殑瀛楃涓插唴瀹广備竴鑸牸寮弍uts锛堝畾涔夌殑瀛楃鏁扮粍鍚嶏級銆4....
绛旓細s鍦C璇█涓浠h〃瀛楃涓鍨嬫牸寮忕銆俢鍜%s涓鑸敤鍦╬rintf銆乻printf绛夊瓧绗︿覆鏍煎紡鍖栧嚱鏁颁腑锛岀敤浜庡喅瀹氭牸寮忓寲鍙傛暟鐨勬暟鎹被鍨嬨傚printf("%s", a)浼氬皢鍙橀噺a浣滀负瀛楃涓茬被鍨嬭繘琛屾牸寮忓寲銆</p><p><br /></p><p>%s闇瑕侀厤鍚坧rintf鍑芥暟涓璧浣跨敤锛屽涓嬫墍绀猴細</p><pre t="code" l="cpp">printf("%s", "...