2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
這要看你輸入什么了。有一個(gè)要點(diǎn):scanf()的返回值是它成功讀入值的個(gè)數(shù)。如果你第一次輸入一個(gè)整數(shù),那么第一個(gè)scanf函數(shù)會(huì)成功讀入一個(gè)整數(shù),它的返回值就是1,即ret的值是1。那么for循環(huán)的關(guān)系表達(dá)式:ret!=1就不成立,整個(gè)循環(huán)就不會(huì)執(zhí)行,程序直接停止。如果你第一次輸入了非整數(shù),那么第一個(gè)scanf函數(shù)成功讀入的值就是0,它返回0,即ret = 0。此時(shí)for循環(huán)的關(guān)系表達(dá)式:ret!=1成立,for循環(huán)才會(huì)開(kāi)始迭代。如果你的程序執(zhí)行的時(shí)候一直在打印,不給你輸入的機(jī)會(huì),說(shuō)明你清空輸入緩沖區(qū)的函數(shù)fflush沒(méi)起作用,緩沖區(qū)里保存的第一次非法輸入一直都在。你把 fflush(stdin); 改成: while(getchar()!='\n'); 就好了。

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
fflush() ;
清除標(biāo)準(zhǔn)輸入緩存。
函數(shù)名: fflush
功 能: 清除文件緩沖區(qū),文件以寫(xiě)方式打開(kāi)時(shí)將緩沖區(qū)內(nèi)容寫(xiě)入文件
原型: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類型,那么這個(gè)int類型具體的返回是什么呢?
返回值:
如果成功刷新,fflush返回0。指定的流沒(méi)有緩沖區(qū)或者只讀打開(kāi)時(shí)也返回0值。返回EOF指出一個(gè)錯(cuò)誤。
注意:如果fflush返回EOF,數(shù)據(jù)可能由于寫(xiě)錯(cuò)誤已經(jīng)丟失。當(dāng)設(shè)置一個(gè)重要錯(cuò)誤處理器時(shí),最安全的是用setvbuf函數(shù)關(guān)閉緩沖或者使用低級(jí)I/0例程,如open、close和write來(lái)代替流I/O函數(shù)。
fflush()函數(shù)
fflush(stdin)刷新標(biāo)準(zhǔn)輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄
fflush(stdout)刷新標(biāo)準(zhǔn)輸出緩沖區(qū),把輸出緩沖區(qū)里的東西打印到標(biāo)準(zhǔn)輸出設(shè)備上
注意事項(xiàng):
C和C++的標(biāo)準(zhǔn)里從來(lái)沒(méi)有定義過(guò) fflush(stdin)。也許有人會(huì)說(shuō):“可是我用 fflush(stdin) 解決了這個(gè)問(wèn)題,你怎么能說(shuō)是錯(cuò)的呢?”的確,某些編譯器(如VC6)支持用 fflush(stdin) 來(lái)清空輸入緩沖,但是并非所有編譯器都要支持這個(gè)功能(linux 下的 gcc 就不支持),因?yàn)闃?biāo)準(zhǔn)中根本沒(méi)有定義 fflush(stdin)。
添加回答
舉報(bào)