c语言中如何用scanf读取一个带有空格的string c语言中如何用scanf读取一个带有空格的string
C\u8bed\u8a00\u7528\u5982\u4f55\u7528scanf\u8f93\u5165\u5e26\u6709\u7a7a\u683c\u7684\u5b57\u7b26\u4e32\u8981\u8f93\u5165\u5e26\u7a7a\u683c\u7684\u5b57\u7b26\u4e32\uff0c\u8981\u7528\u5230\u4e00\u4e2a\u683c\u5f0f\u5b57\u7b26\uff1a%[] --> \u4e00\u4e2a\u5b57\u7b26\u96c6\u3002
\u201c%[]\u201d\u7684\u4f5c\u7528\u662f\u626b\u63cf\u5b57\u7b26\u96c6\u5408\uff1a
\u4f8b\u5982\uff1ascanf(\u201c%[^\n]\u201d,str);
\u5177\u4f53\u4f5c\u7528\u662f\uff1a\u5982\u679c\u8f93\u5165\u7684\u5b57\u7b26\u5c5e\u4e8e\u65b9\u62ec\u53f7\u5185\u5b57\u7b26\u4e32\u4e2d\u67d0\u4e2a\u5b57\u7b26\uff0c\u90a3\u4e48\u5c31\u63d0\u53d6\u8be5\u5b57\u7b26\uff1b\u5982\u679c\u4e00\u7ecf\u53d1\u73b0\u4e0d\u5c5e\u4e8e\u5c31\u7ed3\u675f\u63d0\u53d6\u3002\u8be5\u65b9\u6cd5\u4f1a\u81ea\u52a8\u52a0\u4e0a\u4e00\u4e2a'\0'\u5230\u5df2\u7ecf\u63d0\u53d6\u7684\u5b57\u7b26\u540e\u9762\u3002
#include
int main()
{
char str[81];
printf("Please input a string:\n");
scanf("%[^\n]",&str);
printf("The string is:\n%s\n",str);
return 0;
}
\u6269\u5c55\u8d44\u6599\uff1a
\u5b57\u7b26\u4e32\u51fd\u6570\u5e94\u7528\uff1a
1. \u8fde\u63a5\u8fd0\u7b97 concat(s1,s2,s3\u2026sn) \u76f8\u5f53\u4e8es1+s2+s3+\u2026+sn\u3002
\u4f8b\uff1aconcat(\u201811\u2019,'aa\u2019)='11aa\u2019\u3002
2. \u6c42\u5b50\u4e32\u3002 Copy(s,I,I) \u4ece\u5b57\u7b26\u4e32s\u4e2d\u622a\u53d6\u7b2cI\u4e2a\u5b57\u7b26\u5f00\u59cb\u540e\u7684\u957f\u5ea6\u4e3al\u7684\u5b50\u4e32\u3002
\u4f8b:copy(\u2018abdag\u2019,2,3)=\u2019bda\u2019\u3002
3. \u5220\u9664\u5b50\u4e32\u3002\u8fc7\u7a0b Delete(s,I,l) \u4ece\u5b57\u7b26\u4e32s\u4e2d\u5220\u9664\u7b2cI\u4e2a\u5b57\u7b26\u5f00\u59cb\u540e\u7684\u957f\u5ea6\u4e3al\u7684\u5b50\u4e32\u3002
\u4f8b\uff1as:=\u2019abcde\u2019;delete(s,2,3);\u7ed3\u679cs:=\u2019ae\u2019\u3002
4. \u63d2\u5165\u5b50\u4e32\u3002 \u8fc7\u7a0bInsert(s1,s2,I) \u628as1\u63d2\u5165\u5230s2\u7684\u7b2cI\u4e2a\u4f4d\u7f6e\u3002
\u4f8b\uff1as:=abc;insert(\u201812\u2019,s,2);\u7ed3\u679cs:=\u2019a12bc\u2019\u3002
5. \u6c42\u5b57\u7b26\u4e32\u957f\u5ea6 length(s) \u4f8b\uff1alength(\u201812abc\u2019)=5\u3002
\u5728ASP\u4e2d \u6c42\u5b57\u7b26\u4e32\u957f\u5ea6\u7528 len(s)\u4f8b: len("abc12")=5\u3002
\u53c2\u8003\u8d44\u6599\uff1a
\u767e\u5ea6\u767e\u79d1-\u626b\u63cf\u96c6
\u5b57\u7b26\u4e32\u672c\u6765\u5c31\u4e0d\u662f\u4e13\u804c\u7528\u6765\u8bfb\u53d6\u5b57\u7b26\u4e32\u7684,\u5efa\u8bae\u4f60\u9700\u8981\u8bfb\u53d6\u5e26\u5b57\u7b26\u4e32\u7684\u6570\u636e,\u53ef\u4ee5\u7528
string.h\u5934\u7684
\u4f7f\u7528char
*
gets(char
*)\u8bfb\u5165
\u4f7f\u7528
char
*puts(char
*)
\u8f93\u51fa
\u8f83\u4e3a\u5b89\u5168\u7684\u53ef\u4ee5\u4f7f\u7528:
\u4f7f\u7528char
*
fgets(char
*,int,stdin)\u8bfb\u5165
\u4f7f\u7528
char
*
fputs(char
*,int,stdout)
\u8f93\u51fa
scanf()\u5c31\u662f\u5230\u7a7a\u683c\u505c\u6b62\u8bfb\u53d6\u4f46\u662f\u4e0d\u4e22\u5f03\u6570\u636e
要输入带空格的字符串,要用到一个格式字符:%[] --> 一个字符集。
“%[]”的作用是扫描字符集合:
例如:scanf(“%[^
]”,str);
具体作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果一经发现不属于就结束提取。该方法会自动加上一个'\0'到已经提取的字符后面。
#include <stdio.h>
int main()
{
char str[81];
printf("Please input a string:
");
scanf("%[^
]",&str);
printf("The string is:
%s
",str);
return 0;
}
扩展资料:
字符串函数应用:
1. 连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn。
例:concat(‘11’,'aa’)='11aa’。
2. 求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。
例:copy(‘abdag’,2,3)=’bda’。
3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。
例:s:=’abcde’;delete(s,2,3);结果s:=’ae’。
4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置。
例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’。
5. 求字符串长度 length(s) 例:length(‘12abc’)=5。
在ASP中 求字符串长度用 len(s)例: len("abc12")=5。
参考资料:
百度百科-扫描集
scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以输入带空格的字符串是不可以的,建议用gets来完成这个功能,gets是以回车作为结束的:
char str[40]; gets(str);
字符串本来就不是专职用来读取字符串的,建议你需要读取带字符串的数据,可以用 string.h头的
使用char * gets(char *)读入 使用 char *puts(char *) 输出
较为安全的可以使用:
使用char * fgets(char *,int,stdin)读入 使用 char * fputs(char *,int,stdout) 输出
scanf()就是到空格停止读取但是不丢弃数据
绛旓細鍦C璇█涓锛scanf()鍑芥暟鐢ㄤ簬浠庢爣鍑嗚緭鍏ワ紙閫氬父鏄敭鐩橈級璇诲彇鏁版嵁锛屽苟灏嗗叾瀛樺偍鍒版寚瀹氱殑鍙橀噺涓俿canf()鍑芥暟閫氬父涓庢牸寮忓寲瀛楃涓蹭竴璧浣跨敤锛屾牸寮忓寲瀛楃涓叉寚瀹氫簡瑕佽鍙栫殑鏁版嵁绫诲瀷鍜屾牸寮忋俿canf()鍑芥暟鎸夌収鏍煎紡鍖栧瓧绗︿覆涓寚瀹氱殑鏍煎紡璇诲彇鏁版嵁锛屽苟灏嗗叾瀛樺偍鍒版寚瀹氱殑鍙橀噺涓俿canf()鍑芥暟鐨勮娉曞涓嬶細int scanf(const cha...
绛旓細1.鍦ㄧ▼搴忎腑鍖呭惈stdio.h澶存枃浠躲2.浣跨敤scanf鍑芥暟璇诲彇鏁版嵁鏃讹紝闇瑕佹寚瀹氳璇诲彇鐨勬暟鎹被鍨嬨備緥濡傦紝瑕璇诲彇涓涓暣鏁帮紝鍙互浣跨敤%d鏍煎紡璇存槑绗︼紱瑕佽鍙栦竴涓诞鐐规暟锛屽彲浠ヤ娇鐢%f鏍煎紡璇存槑绗︺3.浣跨敤scanf鍑芥暟璇诲彇鏁版嵁鏃讹紝闇瑕佹寚瀹氳璇诲彇鐨勫彉閲忋備緥濡傦紝瑕佽鍙栦竴涓暣鏁帮紝鍙互灏嗗叾璧嬪肩粰涓涓猧nt绫诲瀷鐨勫彉閲忥紱瑕佽鍙栦竴涓诞...
绛旓細scanf鍑芥暟鏄C璇█涓鐢ㄤ簬浠庢爣鍑嗚緭鍏璇诲彇鏁版嵁骞跺瓨鍌ㄥ埌鍙橀噺涓殑鍑芥暟銆傚叾浣跨敤鏂规硶濡備笅锛氬熀鏈娉曪細c int scanf;璇︾粏瑙i噴锛1. 鍑芥暟瀹氫箟涓庡姛鑳 scanf鍑芥暟瀹氫箟鍦╯tdio.h澶存枃浠朵腑锛屽叾浣滅敤鏄寜鐓ф寚瀹氱殑鏍煎紡璇诲彇杈撳叆鏁版嵁銆傝鍑芥暟浼氭牴鎹彁渚涚殑鏍煎紡瀛楃涓诧紝浠庢爣鍑嗚緭鍏ヨ澶囪鍙栨暟鎹紝骞舵牴鎹牸寮忓瓧绗︿覆涓寚瀹氱殑鏍煎紡锛屽皢璇...
绛旓細1銆C璇█涓璼canf鍑芥暟鐨勭敤娉曚富瑕佹槸閫氳繃缁堢鏍煎紡鍖栬緭鍏ュ嚱鏁帮紝浠庢爣鍑嗚緭鍏ユ祦stdin涓璇诲彇杈撳叆淇℃伅鐨勯氱敤瀛愮▼搴忥紝鍙互璇存槑鐨勬牸寮璇诲叆澶氫釜瀛楃锛屽苟淇濆瓨鍦ㄧ浉搴斿湴鍧鐨勫彉閲忎腑锛屼篃鍙互璇诲叆浠讳綍鍥烘湁绫诲瀷鐨勬暟鎹苟鑷姩鎶婃暟鍊煎彉鎹㈡垚閫傚綋鐨勬満鍐呮牸寮忋2銆乻canf鍑芥暟鐨勬牸寮忚鏄庯細璇绘诞鐐瑰硷紙浠呭瓨浜嶤99锛夛紝c璇鍗曞瓧绗︼紝d璇诲崄杩涘埗鏁...
绛旓細鍦–璇█涓紝浣犲彲浠ヤ娇鐢╯canf鍑芥暟浠庢爣鍑嗚緭鍏ヨ鍙栦竴涓暣鏁銆傝繖涓嚱鏁扮殑鍘熷瀷濡備笅锛歝澶嶅埗浠g爜 int scanf(const char *format, ...);鍏朵腑锛宖ormat鍙傛暟鏄竴涓牸寮忓瓧绗︿覆锛屽畠鍙互鍖呭惈涓绉嶆垨澶氱绫诲瀷鐨勮浆鎹㈣鏄庣锛堝%d琛ㄧず鏁存暟锛夈備笅闈㈡槸涓涓ず渚嬶紝瀹冧粠鏍囧噯杈撳叆璇诲彇涓涓暣鏁帮紝鐒跺悗鎵撳嵃鍑烘潵锛歝澶嶅埗浠g爜 include...
绛旓細鍏蜂綋浣滅敤鏄細濡傛灉杈撳叆鐨勫瓧绗﹀睘浜庢柟鎷彿鍐呭瓧绗︿覆涓煇涓瓧绗︼紝閭d箞灏辨彁鍙栬瀛楃锛涘鏋滀竴缁忓彂鐜颁笉灞炰簬灏辩粨鏉熸彁鍙栥傝鏂规硶浼氳嚜鍔ㄥ姞涓婁竴涓'\0'鍒板凡缁忔彁鍙栫殑瀛楃鍚庨潰銆俰nclude <stdio.h> int main(){ char str[81];printf("Please input a string:\n");scanf("%[^\n]",&str);printf("The string...
绛旓細scanf鏄C璇█涓鐨涓涓爣鍑嗚緭鍏ヨ緭鍑哄簱鍑芥暟锛屼富瑕佺敤浜庝粠鏍囧噯杈撳叆璁惧璇诲彇鏁版嵁銆傚畠鍙互鏍规嵁鎸囧畾鐨勬牸寮忥紝灏嗚緭鍏ョ殑鏁版嵁瀛樺偍鍒版寚瀹氱殑鍙橀噺涓傝鍑芥暟鏄疌璇█涓潪甯搁噸瑕佺殑涓閮ㄥ垎锛屽洜涓哄畠鍏佽绋嬪簭涓庣敤鎴疯繘琛屼氦浜掞紝鑾峰彇鐢ㄦ埛杈撳叆鐨勬暟鎹2. 浣跨敤鏂瑰紡 scanf鐨勪娇鐢闈炲父鐩磋鍜屾柟渚裤傚叾鍩烘湰璇硶涓猴細`scanf`銆傚叾涓紝鏍煎紡鎺у埗...
绛旓細C璇█涓鐨剆canf鍑芥暟鏄敤浜庝粠鏍囧噯杈撳叆娴乻tdin锛堝嵆閿洏锛璇诲彇鏁版嵁鐨勯噸瑕佸伐鍏枫傚叾鍩烘湰鐢ㄦ硶鏄氳繃鏍煎紡瀛楃涓叉寚瀹氳緭鍏ョ殑妯″紡锛屽苟灏嗚鍙栫殑鏁版嵁瀛樺偍鍒扮浉搴旂殑鍙橀噺涓紝鍑芥暟鍘熷瀷涓篿nt scanf(const char* restrict format,...)銆傚湪浣跨敤scanf鏃讹紝鏍煎紡瀛楃涓蹭腑鐨勬牸寮忚鏄庣鍐冲畾浜嗗浣曡В鏋愯緭鍏ュ唴瀹广傝繖浜涜鏄庣涓庤緭鍏ュ弬鏁...
绛旓細scanf 鍑芥暟鏈涓昏鐨勭敤娉曟槸锛歴canf("杈撳叆鎺у埗绗", 杈撳叆鍙傛暟);鍔熻兘锛氬皢浠庨敭鐩樿緭鍏ョ殑瀛楃杞寲涓衡滆緭鍏ユ帶鍒剁鈥濇墍瑙勫畾鏍煎紡鐨勬暟鎹紝鐒跺悗瀛樺叆浠ヨ緭鍏ュ弬鏁扮殑鍊间负鍦板潃鐨勫彉閲忎腑銆鐢╯canf()鍑芥暟浠%s鏍煎紡璇诲叆鐨鏁版嵁涓嶈兘鍚湁绌虹櫧绗︽椂锛屾墍鏈夌┖鐧界閮借褰撳仛鏁版嵁缁撴潫鐨勬爣蹇椼傛墍浠ラ涓嚱鏁拌緭鍑虹殑鍊煎彧鏈夌┖鏍煎墠闈㈢殑閮ㄥ垎銆傚...
绛旓細鍦C璇█涓锛屽彲浠浣跨敤scanf鍜宲rintf鍑芥暟瀹炵幇鏁存暟鐨勮緭鍏ヨ緭鍑恒備互涓嬫槸鏁存暟鐨勭ず渚嬩唬鐮侊細鍦ㄤ笂闈㈢殑浠g爜涓紝鎴戜滑棣栧厛瀹氫箟浜嗕竴涓暣鍨嬪彉閲弉um锛岀劧鍚庝娇鐢╬rintf鍑芥暟鎻愮ず鐢ㄦ埛杈撳叆涓涓暣鏁般傛帴鐫锛屼娇鐢╯canf鍑芥暟璇诲彇鐢ㄦ埛杈撳叆鐨勬暣鏁帮紝骞跺皢鍏跺瓨鍌ㄥ埌num鍙橀噺涓傛渶鍚庯紝浣跨敤printf鍑芥暟杈撳嚭鐢ㄦ埛杈撳叆鐨勬暣鏁般♡♡ 鏈...