while(getchar()!='n'); -- 應(yīng)當(dāng)是 while(getchar()!='\n'); 這是不斷循環(huán)取字符,直到取到 Enter 鍵時結(jié)束循環(huán)。作用,清除上面一次輸入時殘留在輸入流中的字符。
創(chuàng)新互聯(lián)公司作為成都網(wǎng)站建設(shè)公司,專注重慶網(wǎng)站建設(shè)公司、網(wǎng)站設(shè)計(jì),有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,行業(yè)涉及石涼亭等多個領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。
改用 fflush(stdin); 更佳。
ret = scanf("%d,%d",a,b); ret 為成功讀得的數(shù)據(jù)個數(shù)。
清除的緩沖區(qū)中的殘留數(shù)據(jù): if (ret != 2) fflush(stdin);
1、fflush(stdin)是清空輸入緩沖區(qū)的意思。stdin就是標(biāo)準(zhǔn)輸入 std即standard(標(biāo)準(zhǔn)),in即input(輸入),合起來就是標(biāo)準(zhǔn)輸入。 一般就是指鍵盤輸入到緩沖區(qū)里的東西。
2、在清除文件緩沖區(qū)時使用,文件以寫方式打開時將緩沖區(qū)內(nèi)容寫入文件。
例:
#include conio.h
#include io.h
#include stdio.h
#include string.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);
}
擴(kuò)展資料
使用fflush的注意事項(xiàng)
1、MSDN 文檔里也清楚地寫著:fflush on input stream is an extension to the C standard (fflush 操作輸入流是對C標(biāo)準(zhǔn)的擴(kuò)充)。以下是 C99 對 fflush 函數(shù)的定義:int fflush(FILE *stream);
2、如果stream指向輸出流或者更新流(update stream),并且這個更新流最近執(zhí)行的操作不是輸入,那么fflush函數(shù)將把任何未被寫入的數(shù)據(jù)寫入stream指向的文件(如標(biāo)準(zhǔn)輸出文件stdout)。
3、fflush函數(shù)的行為是不確定的。fflush(NULL)清空所有輸出流和上面提到的更新流。如果發(fā)生寫錯誤,flush函數(shù)會給那些流打上錯誤標(biāo)記,并且返回EOF,否則返回0。
4、如果 stream 指向輸入流(如 stdin),那么 fflush 函數(shù)的行為是不確定的。故而使用 fflush(stdin) 是不正確的。
參考資料來源:百度百科—fflush(stdin)
fflush(stdin)
;
清空輸入緩沖區(qū),通常是為了確保不影響后面的數(shù)據(jù)讀?。ɡ缭谧x完一個字符串后緊接著又要讀取一個字符,此時應(yīng)該先執(zhí)行fflush(stdin);)
sys()這個函數(shù)在C語言中不存在,我猜你說的是system()函數(shù),這個函數(shù)可以執(zhí)行系統(tǒng)命令,如:
system("pause");表示執(zhí)行到此處要暫停,等待按任意鍵繼續(xù)執(zhí)行。
system("cls");表示清屏。
是I/O 函數(shù)分為“帶緩沖”的和“不帶緩沖”的兩類。
帶緩沖的 I/O 函數(shù)寫數(shù)據(jù)時,并不直接寫磁盤介質(zhì),而是將數(shù)據(jù)先寫到這塊內(nèi)存緩沖中,之后用戶空間緩沖中的數(shù)據(jù)會被傳送到系統(tǒng)緩沖中。
linux 內(nèi)核會將系統(tǒng)緩沖中的數(shù)據(jù)送完磁盤驅(qū)動器(fsync函數(shù)可以加速這一過程),這之后,數(shù)據(jù)才真正的被寫入磁盤。
因?yàn)槟壳皟?nèi)存的讀寫速度往往遠(yuǎn)大于硬盤的讀寫速度(常 ms 級)。因此,緩沖區(qū)的建立可以盡力避免太過頻繁的寫磁盤。
對于硬盤來說,寫入一個字節(jié)可能跟寫入一個扇區(qū)沒什么兩樣,程序員每次寫入的數(shù)據(jù)也許就幾個字節(jié),所以可以將每次寫入的幾個字節(jié)放入緩沖區(qū),排列組合成一整塊數(shù)據(jù)再寫入,也能極大的提升效率。
擴(kuò)展資料
1、帶緩沖的 I/O 讀函數(shù)讀取數(shù)據(jù)之前,則會首先判斷用戶空間的進(jìn)程緩沖區(qū)是否包含數(shù)據(jù),如果沒有,則繼續(xù)判斷系統(tǒng)緩沖區(qū)是否包含數(shù)據(jù)。
2、“帶緩沖”的 I/O 讀函數(shù)從磁盤讀取數(shù)據(jù)時,并不只讀取調(diào)用者指定的讀取字節(jié)數(shù)。讀函數(shù)可能一次性讀取一個扇區(qū)(常常是 512B)保存在緩沖區(qū)里,只返回給程序員需要的 10 字節(jié)。