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

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

我沒搞懂,它前面那個fprintf明明是輸出嘛,怎么刷新的是輸出流不是輸入流?

我沒搞懂,它前面那個fprintf明明是輸出嘛,怎么刷新的是輸出流不是輸入流?

牛魔王的故事 2022-12-22 17:13:33
今天這段代碼用fflush刷新這塊,老師說fflush(fp)是刷新輸入流,在全緩存。
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

這要看你輸入什么了。有一個要點:scanf()的返回值是它成功讀入值的個數。如果你第一次輸入一個整數,那么第一個scanf函數會成功讀入一個整數,它的返回值就是1,即ret的值是1。那么for循環的關系表達式:ret!=1就不成立,整個循環就不會執行,程序直接停止。如果你第一次輸入了非整數,那么第一個scanf函數成功讀入的值就是0,它返回0,即ret = 0。此時for循環的關系表達式:ret!=1成立,for循環才會開始迭代。如果你的程序執行的時候一直在打印,不給你輸入的機會,說明你清空輸入緩沖區的函數fflush沒起作用,緩沖區里保存的第一次非法輸入一直都在。你把 fflush(stdin); 改成: while(getchar()!='\n'); 就好了。

查看完整回答
反對 回復 2022-12-25
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

fflush() ;
清除標準輸入緩存。
函數名: fflush
功 能: 清除文件緩沖區,文件以寫方式打開時將緩沖區內容寫入文件
原型:int fflush(FILE *stream)
程序例:
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
void flush(FILE *stream);
int main(void)
{
FILE *stream;
char msg[] = "This is a test";
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, stream);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without\
closing it */
flush(stream);
printf("\nFile was flushed, Press any key\
to quit:");
getch();
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush the stream's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}
fflush 的返回值類型是int類型,那么這個int類型具體的返回是什么呢?
返回值:
如果成功刷新,fflush返回0。指定的流沒有緩沖區或者只讀打開時也返回0值。返回EOF指出一個錯誤。
注意:如果fflush返回EOF,數據可能由于寫錯誤已經丟失。當設置一個重要錯誤處理器時,最安全的是用setvbuf函數關閉緩沖或者使用低級I/0例程,如open、close和write來代替流I/O函數。
fflush()函數
fflush(stdin)刷新標準輸入緩沖區,把輸入緩沖區里的東西丟棄
fflush(stdout)刷新標準輸出緩沖區,把輸出緩沖區里的東西打印到標準輸出設備上
注意事項:
C和C++的標準里從來沒有定義過 fflush(stdin)。也許有人會說:“可是我用 fflush(stdin) 解決了這個問題,你怎么能說是錯的呢?”的確,某些編譯器(如VC6)支持用 fflush(stdin) 來清空輸入緩沖,但是并非所有編譯器都要支持這個功能(linux 下的 gcc 就不支持),因為標準中根本沒有定義 fflush(stdin)。

 


查看完整回答
反對 回復 2022-12-25
  • 2 回答
  • 0 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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