日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C语言中(字符串)输入scanf()、gets()、fgets()以及getchar()、getc()函数的联系与区别

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中(字符串)输入scanf()、gets()、fgets()以及getchar()、getc()函数的联系与区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

scanf()函數的輸入基于獲取“單詞”,如果使用%s格式,字符串以第一個非空白字符開始讀入,讀到(但不包括)下一個空白字符(可以是空格、制表符或者換行符)。使用scanf()把一個字符串讀進一個字符數組時,不使用&。scanf()函數返回成功讀入項目的個數,若沒有任何合乎要求的項目讀入,scanf()返回0,當它檢測到文件結尾時,返回EOF(#define指令把EOF的值定義為-1)。

使用格式:

char str[20];
scanf("%s",str);

gets()函數輸入基于獲取“字符串”,從stdio流中讀取字符串,直至接受到換行符或EOF時停止,并將讀取的結果存放在buffer指針所指向的字符數組中。從字符串的第一個字符開始讀入,讀到第一個“\n”(換行字符)字符。即,讀取換行符之前(不包括換行符)的所有字符,在這些字符后添加一個空字符(\0),然后把這個字符串讀進一個字符數組。它將讀取換行符并將其丟棄,這樣下一次讀取從新的一行開始。gets()函數返回一個指向char的指針,返回的指針與傳遞給它的是同一指針。gets()函數實際的構造比較復雜,因為它有兩個可能的返回值。如果讀入順利,返回讀入字符串的地址;如果出錯或者gets()函數遇到文件結尾,它就返回一個空(或0)地址,這個空地址即空指針,用stdio.h中的常量NULL來表示。

由于gets()不檢查目標數組是否能容納輸入,所以很不安全。

使用格式:

char str[20];
char *ptr;
ptr = gets(str);

gets()函數構造:

char *gets(char *s){
……
return(s);
}

fgets()函數與gets()不同在于它需要第二個參數來說明最大讀入數,參數為n,則fgets()就會讀取最多n-1個字符或者讀完一個換行符為止,兩者最先滿足要求的那一個來結束讀入。fgets()讀取到換行符,就會把它存到字符串里,而不是像gets()那樣丟棄它。它由第三個參數來說明讀哪一個文件,stdin代表從鍵盤讀入。

使用格式:

char *str;
char *ptr;
ptr = fgets(str,20,stdin);

getchar()函數沒有參數,它返回來自輸入設備的下一個字符,putchar()打印它的參數。這兩個函數通常在stdio.h中定義,通常是預處理宏,而非真正的函數。可以利用循環將字符依次讀入到字符串數組,getchar()可以接收換行符,因此需要在循環讀入的過程中消除換行字符。

char s[20];
int n=0;
while(1){
s[n]=getchar();   // 讀入1個字符
if (s[n]=='\n') 
break;  // 如果是換行符,則結束循環;相當于清除緩存中輸入確定的換行符
n++;
} 

函數getc()功能則主要是從流中取字符,從文件指針stream指向的文件流中讀取一個字符,并把它作為函數值返回給整型變量ch,讀取字符后文件指針并不會移動這和fgetc()函數是不一樣的,如果讀取失敗或者到了文件結束標志返回EOF(-1)。

int getc(FILE *stream);

?

?

?

?

總結

以上是生活随笔為你收集整理的C语言中(字符串)输入scanf()、gets()、fgets()以及getchar()、getc()函数的联系与区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。