程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> c語言中讀入帶空格的字符串

c語言中讀入帶空格的字符串

編輯:關於C

http://blog.csdn.net/pipisorry/article/details/37073023

問題:

scanf(%s, a);

運行輸入hello world
回車
則輸入到a的只是空格之前的部分,怎樣把空格之後的部分也輸出?


1. scanf( %[^ ], str );
#include 
int main(){
    char str[50];
    scanf( %[^
], str );
    printf( %s
, str );
    return 0;
}
more: scanf中的正則表達式
1、定制自己的掃描集 %[abc]、%[a-z]、%[^abc]、%[^a-z],比isdigit()、isalpha()更加靈活。[]內是匹配的字符,^表示求反集。
int i;
char str[80], str2[80];
// scanf(%d%[abc]%s, &i, str, str2);
// printf(%d %s %s ,i,str,str2);
// scanf(%[a-zA-Z0-9], str);
// scanf(%[^abce], str);
scanf(%[^a-z], str);
printf(%s ,str);
2、讀入一個地址並顯示內存地址的內容
int main(void){
char ch='c';
printf(%p , &ch); // print the address of ch.
char *p;
cout< scanf(%p, &p); //input the address displayed above
printf(Value at location %p is %c ,p,*p);
return 0;
}
3、丟棄不想要的空白符:scanf(%c %c);
4、控制字符串中的非空白符:導致scanf()讀入並丟棄輸入流中的一個匹配字符。%d,%d;
5、壓縮輸入:在格式碼前加上*,則用戶就可以告訴scanf()讀這個域,但不把它賦予任何變量。
scanf(%c%*c, &ch); 使用此方法可以在字符處理時吃掉多余的回車。

2.scanf()
int t[999];
int sum=0;
while(scanf(%c,&t[sum++])!=EOF);

3.gets() gets()
#include   
//char *fgets( char *str, int num, FILE *stream ); 
int main(){
    char buffer[10]; 
    //fgets(buffer,10,stdin); //帶有回車符
    gets(buffer);    //沒有回車符
 
    printf(%s,buffer); 
    return 0;
}
more: gets() 不檢查字符串容量,有可能越界寫數據,用戶可不一定給你按套路出牌,可能輸入長達300字節甚至2k字節的字符串,這樣的話很危險
雖然strlen,strcyp等等這些函數因為追求高效率也不會檢查指針是否為空,指針是否可寫,但是這些函數是C程序員來操作的,C程序員有正確使用函數的素質。 但是gets() 是用戶來輸入,用戶並不知道字符串上限,而且就算知道,也不一定有素質去按規定使用,要多多注意
用fgets(str,80,stdin);就不危險了,fgets比較安全 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved