這是從百度百科上查找的資料:
gets():
從stdin流中讀取字符串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字符串。
所以用gets來輸入字符串時換行符被讀取(不留在緩沖區),並被系統轉化為null值
所以,下圖是錯誤的用法:
相比之下,而getchar()可以將換行符作為內容:改變一下後為
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char c;
int i = 0, j = 0, k = 0, l = 0,m=0;
printf("請輸入一個長度不超過200的字符串: \n");
while ((c=getchar())!= '\n')
{
if(isalpha(c))
j++;
if(isdigit(c))
k++;
if(isspace(c))
l++;
if(ispunct(c))
m++;
}
printf("該字符串的字母個數:%d,數字個數:%d,空格個數:%d,標點個數:%d", j,k,l,m);
return 0;
}
不過從這個程序中還是有許多函數可以借鑒:
1.isalpha()
用法:頭文件加入#include (C語言使用<ctype.h>)
功能:判斷字符ch是否為英文字母,當ch為英文字母a-z或A-Z時,則函數返回不是1的值,否則返回0
同理:
isupper
原型:extern int isupper(int c);
頭文件:<ctype.h>
功能:判斷字符c是否為大寫英文字母
說明:當參數c為大寫英文字母(A-Z)時,返回非零值,否則返回零。
附加說明: 此為宏定義,非真正函數。
islower
islower(測試字符是否為小寫字母)
2.isdigit
原型:extern int isdigit(char c);
用法:#include <ctype.h>
功能:判斷字符c是否為數字
說明:當c為數字0-9時,返回非零值,否則返回零。
附加說明 此為宏定義,非真正函數。
3.isspace
表頭文件
#include<ctype.h>
定義函數
int isspace(int c)
函數說明
檢查參數c是否為空格字符,也就是判斷是否為空格(' ')、水平定位字符
('\t')、歸位鍵('\r')、換行('\n')、垂直定位字符('\v')或翻頁('\f')的情況。[1]
返回值
若參數c為空格字符,則返回TRUE,否則返回NULL(0)。
附加說明
此為宏定義,非真正函數。
4.ispunct
表頭文件
#include<ctype.h>
定義函數
int ispunct(int c)
函數說明
檢查參數c是否為標點符號或特殊符號。返回TRUE也就是代表參數c為
非空格、非數字和非英文字母。