亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c語言的問題,不太理解這個函數,大神給解釋一下?

c語言的問題,不太理解這個函數,大神給解釋一下?

手掌心 2019-02-05 10:06:34
char * s_gets(char *st, int n){char * ret_val;int i = 0; ret_val = fgets(st, n, stdin);if (ret_val){while (st[i] != '\0' && st[i] != '\n')i++;if (st[i] == '\n')st[i] = '\0';elsewhile (getchar() != '\n')continue;}return ret_val;}
查看完整描述

3 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

fgets函數原型char *fgets(char *buf, int bufsize, FILE *stream);參數*buf: 字符型指針,指向用來存儲所得數據的地址。bufsize: 整型數據,指明存儲數據的大小。*stream: 文件結構體指針,將要讀取的文件流。含義:從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'\0'),如果文件中的該行,不足bufsize個字符,則讀完該行就結束。如若該行(包括最后一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩沖區總是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。

----------------------------以上說明,引用百度知道,“修者世界 ”的發言,不是本人編著

下面我對你這個代碼補充說明:

stdin是C語言中標準輸入流,一般用于獲取鍵盤輸入

所以代碼 ret_val = fgets(st, n, stdin); 這里意思:

從鍵盤讀入n位字符+結束'\0’存放到st數組中。

而判斷if (ret_val){。。。。這里的意思:

當鍵盤輸入的字符大于一次讀取緩存空間st時(ret_val 以‘\0’結尾),通過               getchar()截取掉鍵盤緩沖區剩余字符。并返回 ret_val 。

當鍵盤輸入的字符小于一次讀取緩存空間st時(ret_val 以回車‘\n’結尾),

將結尾的'\n'替換成'\0',并返回ret_val 。

所以總結:

char * s_gets(char *st, int n)的意思就是: 傳參數組指針st、數組大小n。返回鍵盤輸入的字符串前n-1個字符。

比如,main函數調用,定義6維度大小的數組

12345678int main(){    char buf[6],*restr;    int n=sizeof(buf);    restr=s_gets(buf,n);    printf("%s",restr);    return 0;}

輸入9個字符。打印前5個。

輸入4個字符。打印全部。



查看完整回答
反對 回復 2019-03-14
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

大致意思是一次從stdin讀取一行,最多n個字符, 如果n個里面包含回車,截取回車前面的
如果不包含回車,一致讀直到讀到回車

或者

返回一個指向字符串的指針

查看完整回答
反對 回復 2019-03-14
  • 3 回答
  • 0 關注
  • 960 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號