一般大家輸入一串含空格字符串多用gets()函數,但其實對於scanf()也可以實現,筆者無意間看到這種寫法,覺得很神奇也很有用。其中[]
中表示字符串集合,^
表示後面的字符不被包含。如:輸入一段含空格的字符串且僅回車結束可以用%[^\n]
的方式。不過如果想繼續輸入下一段字符串,則需要在前面加一個getchar()將上一次輸入最後的回車符取出,不然下一行的輸入遇到\n
就會結束。
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
char str[100];
scanf("%[^\n]",str);
cout<<str<<endl;
getchar();
scanf("%[1-9]",str);
cout<<str<<endl;
return 0;
}
運行結果:
sd23 sd87 7s8d6 sdf\';/.,sd d
sd23 sd87 7s8d6 sdf\';/.,sd d
87668sdcsd sd76
87668