1. 程式人生 > >c語言在輸入字串時輸入空格的方式

c語言在輸入字串時輸入空格的方式

1.最容易的,將一個字串分為一個一個字元輸入 char s[100]; int i=0; while(scanf("%c",&s[i]),s[i]!='/n')i++; s[i]='/0'; //遇到換行停止輸入,並且將換行替換為/0 printf("%s/n",s); 但是如果在這段程式前還有其他型別的輸入,則需要把回車吃掉,即加一條scanf("%*c"),因為scanf不會將/n或者空格符賦值給字串,但會賦值給字元輸入"%c". 如: int x; scanf("%d",&x); printf("%d/n",x); scanf("%*c"); //用來吃掉輸入x時的分隔符號,可以是/n,或者空格之類的; while(scanf("%c",&s[i]),s[i]!='/n')i++; s[i]='/0'; printf("%s/n",s); ps: getch()是從鍵盤接收 getchar()是從緩衝區讀取,也都可以實現這個類似功能。 關於鍵盤上的回車鍵,可能大家都知道,按下回車鍵,在Window下產生兩個字元,是/r/n(回車+換行),程式輸入文字時遇到"/r/n"轉換為/n,輸出是將/n轉為/r/n(二進位制方式下不存在這種方式),這是Window系統的特立獨行吧。這與mac和Unix都不相同,不詳細說了。 2.char *gets( char *buffer ) 比較簡單,gets讀取一行,遇到/n結束,它會把/n一併讀取,並將/n替換為/0。(/n不會留在緩衝區) char s[100]; gets(s); 如果輸入abc def回車,則s中的值為abc def/0 關於程式前面的輸入遺留的分隔符和第一種方法一樣; 3.fgets(char * s,int size,FILE * stream) 和gets差不多,fgets會讀取行尾的/n,然後再新增/0,(/n不會留在緩衝區) char s[100]; fgets(s,40,stdin); 如果輸入abc def回車,則s中的值為abc def/n/0 4.scanf("%[^/n]",s) 使用scanf正則表示式,直到遇到/n停止輸入,/n不會進入s,會留在緩衝區,需要吃掉,可以scanf("%[^/n]%*c",s)或者getchar()吃掉,這裡/n可以換成其他字元。 當然用c++的話有getline,get等 cin.getline會將緩衝區的/n拋棄,cin.get不會(結束符會留在緩衝區)。 其實那都是在預設結束符號為/n時,當結束符設定為'a',則拋棄a,如果a之後的字元仍在緩衝區中。 總結:輸入放入緩衝區,函式再從緩衝區讀取,每個函式都有不同的處理方式,於是乎就讓人糾結起來,我也沒講全,但針對空格是基本夠用了。其他高階語言的話處理起來好多了,用c還是有一點點糾結,不過這也是自由吧。 也許有疏漏或不對的地方,見諒。