空白符:空格,回車,制表符等等。
1、字符型數據(單個數據的輸入)。
(1)scanf輸入,
遇到回車,空格,tab鍵會記錄進去,使得一個字符的內容變為空格這類的字符,
eg:輸入格式:5
M
解決方法:
(1)getchar();處理一個字符。%*c賦值抑制符,跳過一個字符,讀入但不存儲。
scanf("%d",&n); getchar(); scanf("%c",&M);
(2)跳過多個空白字符在格式傳中的 %c之前加上空格或者在%d之后加上空格
scanf("%d",&n); scanf("%d ",&n); scanf(" %c",&M); scanf("%c",&M);
2、字符數組與字符串
通常
用一個字符數組來存儲一個字符串。字符串和普通字符數組的區別在於字符串末尾有一個空字符'\0'. 空字符不計入字符串有效字符,也不計入總長度
字符串的循環遍歷條件:
s【i】!=‘\0’
字符串的輸入與輸出
所有的字符串操作針對的其實是字符數組,因為字符串是無法直接定義的。
char name[100];
(1)用%s整體輸入/輸出
scanf(“%s”,name);
printf(“%s”,name);
注意:
該格式讀入的數據中不能含有空白符,所有的空白符都會被當做數據結束的標志。
(2)gets()和puts()函數
gets(name);
遇到換行符或文件結束標志會結束讀入。換行符不作為讀取字符串的內容,換行符會被轉黃偉字符串結束標志‘|0’.
puts():輸出字符串並自動換行, 該函數只能輸出字符串。
printf():通過格式控制符%s輸出字符串,不能自動換行。除了字符串,printf() 還能輸出其他類型的數據。
gets和scanf的區別
1、 gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。
例如:如果輸入為"hello world"時,上面程序的運行結果是"hello world"。而如果用scanf則只能輸出hello
2、scanf對末尾回車符的處理:把回車符保留在緩存中。gets對末尾回車符的處理:接收回車,但把回車替換為\0.
3、gets的返回值為char*型,當讀入成功時會返回輸入的字符串指針地址,出錯時返回NULL;scanf返回值為int型,返回實際成功賦值的變量個數,當遇到文件結尾標識時返回EOF。
4、gets函數僅用於讀入字符串;scanf為格式化輸出函數,可以讀入任意C語言基礎類型的變量值,而不是僅限於字符串(char*)類型。
3、常用字符串函數
(1)string.h頭文件中:
strlen(),計算長度。strlen(s)返回的就是
結束標記之前的字符個數。而s[strlen(s)]是結束標記“\0”。
字符串復制:
strcpy(字符數組1,字符串2)復制第二個參數中的內容到第一個參數,
strcpy(字符數組1,字符串2,n)復制第二個參數中的最多n個字符到第一個參數中。
字符串比較:
strcmp(字符串1,字符串2)比較大小,前者大返貨一個正整數,后者大返回一個負整數,相等放回0.
strncmp(s1,s2,n)將字符串1中最多n個字符與字符串2進行比較
字符串連接:
strcat(s1,s2)第二個參數的內容添加到第一個參數的有效字符后面。
strcat(s1,s2,n)第二個參數的最多n個字符添加到第一個參數的有效字符后面。
字符串 逆置:
strrev(str) /* * 函數名:reverseStr * 函數功能:把字符串中的字符逆置 * 參數:需要逆置的字符串地址 */ void reverseStr(char *str) { int len; int i; char temp; len = strlen(str); // 獲取字符串長度 /* 中間對折,兩邊調換 */ for (i = 0; i < len/2; i++) { temp = str[i]; str[i] = str[len-1-i]; str[len-1-i] = temp; } }
(2)stdio.h中的用於字符串輸入輸出的函數(
ip判斷中用得非常巧,字符串類型的數據可以以其他格式存儲,且可以改變成整型存儲。整型數據也可以再存儲到字符串中)
sprintf(str,"zhang san is %d",d);
將輸出結果保存在str中而不是輸出到屏幕了。
sscanf(str,"%*6d%4d%2d%2d",&year,&month,&day);
從str字符串中讀入數據並存儲到變量中。str中存儲了某人的身份證號“410621111109092108”。
二維字符數組的輸入和輸出:
在輸入之前如果有整型數據的話,記住輸入過整型數據后加一個getchar(),將你下一個輸入的轉行符記錄走
eg:
while(scanf("%d%d",&n,&m),n!=0&&m!=0){ getchar();
char str[n][LEN];//注意列長度與結果的正確性有很大關系,最好不要直接用你定義的輸入數據,可以用#define一個 for(i=0;i<n;i++){ gets(str[i]); } for(i=0;i<n;i++){ puts(str[i]); }