3 回答

TA貢獻1805條經(jīng)驗 獲得超10個贊
都是從輸入流中讀取數(shù)據(jù),但功能有很大差別:
1 操作類型不同。
gets函數(shù)僅用于讀入字符串。
scanf為格式化輸出函數(shù),可以讀入任意C語言基礎(chǔ)類型的變量值,而不是僅限于字符串(char*)類型。
2 截止字符不同。
gets函數(shù)固定的以換行符作為結(jié)尾,遇到換行符時結(jié)束輸入。
scanf函數(shù)默認以空白函數(shù)結(jié)尾,同時可以對截止函數(shù)進行修改。
3 對截止字符處理不同。
gets函數(shù)會讀入截止字符\n, 同時將\n自動替換為\0.
scanf遇到截止字符時不會繼續(xù)讀取,截止字符將存儲于輸入緩沖中。
4 返回值類型不同。
gets的返回值為char*型,當讀入成功時會返回輸入的字符串指針地址,出錯時返回NULL。
scanf返回值為int型,返回實際成功賦值的變量個數(shù),當遇到文件結(jié)尾標識時返回EOF。

TA貢獻1884條經(jīng)驗 獲得超4個贊
gets函數(shù)和scanf函數(shù)都可以作為字符串的輸入函數(shù),
相同點:都是將從鍵盤輸入的字符串存入數(shù)組中,輸入完成后要以回車來結(jié)束輸入。
不同點:利用sanf時,在輸入過程中碰到空格時系統(tǒng)認為輸入結(jié)束,并將空格之前的字符作為有效字符存入數(shù)組中,并在尾部追加\0作為結(jié)束標志。利用gets時,空格符被看作是有效字符,也就是說只有碰到回車符時系統(tǒng)才認為輸入結(jié)束。

TA貢獻1846條經(jīng)驗 獲得超7個贊
是不是這代碼前面還有什么輸入語句,反正在我電腦上運行結(jié)果一樣.
gets與scanf的區(qū)別是gets一次讀一行,scanf遇到空格回車結(jié)束!
gets()函數(shù)的話會連zhanghao后面的回車也當做字符輸入了,對比的話肯定就是跟zhanghao不一樣;
添加回答
舉報