關於 scanf(“%[^\n]%*c“,str)


在做題中,常常要求讀入一行字符串,而這串字符里面可能有空格、制表符等空白字符,如果直接用%s是不可以的,於是有些人就想到用gets(),但由於gets很難控制,故而一般不推薦使用,所以用%[^\n]就可以很好的解決這個問題了,^表示"非"即讀入其后面的字符就結束讀入。
#include <stdio.h>
int main()
{
int str[100];
while(~scanf("%[^\n]%*c",str)) puts(str); //%*c的作用是讀入\n,否則后面讀入的將是\n
return 0;
}
經過上述代碼處理,便可順利地循環讀取帶有空格的字符串。
另外地,
所有對%s起作用的控制都可以用%[ ]:

%[0-9]表示只讀入'0'到'9'之間的字符

%[a-zA-Z]表示只讀入字母

%[^a-z]就表示讀入小寫字母之外的字符。

"%n[^=]" 讀入"="號前的至多n 個字符

'-'是范圍連接符,當然也可以直接列出需要讀入的字符。

%c 一個單一的字符 
%d 一個十進制整數 
%i 一個整數 
%e, %f, %g 一個浮點數 
%o 一個八進制數 
%s 一個字符串 
%x 一個十六進制數 
%p 一個指針 
%n 一個等於讀取字符數量的整數 
%u 一個無符號整數 
%[] 一個字符集 
%% 一個精度符號
例如從鍵盤輸入的"1235ab86"中讀取1235、86給n。
#include <stdio.h>
int skip(){
scanf("%*[^0-9]"); //跳過讀入 非0-9 的字符
return 1;
}
int main()
{
int n;
while(skip()&&~scanf("%d",&n)) //再讀入skip處理后的字符給n
printf("%d\n",n);
return 0;
}
//輸出為:1235
//86
整數部分的高位有多余的0時,過濾0以獲取不含0的整數 
#include <stdio.h>
int str[100];
int fun(){
scanf("%[^1-9]",&str); //讀入字符,如果遇到非1-9的字符,停止
return 1;
}
int main()
{
while(fun()&&~scanf("%s",&str)){ //scanf再次讀入經fun處理后的字符串,會覆蓋fun讀入的字符
puts(str); //這樣可以達到刪去不想要的字符的目的
}
return 0;
}
//輸入0000001234,56
//輸出1234,56
根據第一例,也可使用跳過字符的方式獲取
#include <stdio.h>
int str[100];
int skip(){
scanf("%*[^1-9][^,]"); //跳過讀入非1-9和非,的字符
return 1;
}
int main()
{
while(skip()&&~scanf("%s",&str)){ //scanf再次讀入經skip處理后的字符串
printf("%s",str); //這樣可以達到刪去不想要的字符的目的
//也可以在跳過讀取后,scanf輸入給int變量n而不是字符數組str,修改相應輸入輸出可靈活變換
}
return 0;
}
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM