作者wtchen (沒有存在感的人)
看板C_and_CPP
標題[問題] 關於fflush的使用時機
時間Wed Jun 10 21:32:39 2015
使用Lubuntu + gcc 4.9.2
問題(Question):
目前在練習file input/output
有個疑問是如何不要讓前面輸入的Enter影響到後面
看了一下自己手上的書「邊學邊做C語言」是用fflush(stdin)
不過我加進去以後根本沒反應,輸入完要求的char+Enter程式就直接跑到底
然後看了版友的建議用while(getchar()!='\n');
(不過我不太懂,這邊最後一個getchar()不是輸入完要求的char打的'\n'嗎?)
可是的確有用,程式的確停下來叫我輸入string
稍微看了一下好像有些大大說不能用fflush(stdin)
可是google一下發現很多人都在用
我自己對fflush的認識也是把之前輸入到buffer裡的清掉
還是我對fflush的認識有誤?
感謝各位協助。
程式同步分享在此:
https://gist.github.com/gnitnaw/ac3dbcd8fa8e11c515c8
#include <stdio.h>
#define MAXSIZE 256
void read_string(char* p); //可以用scanf或fgets替代,我兩個都不滿意所以自己寫
int main(void) {
char c, s[MAXSIZE];
puts("I/O lib");
puts("");
printf("Please give me a char: ");
c = getchar();
printf("What you keyin is %c\n", c);
fflush(stdin);
while(getchar()!='\n');
printf("Please give me a string : ");
read_string(s);
printf("What you keyin is %s\n", s);
printf("\n Press <Enter> to continue...");
while ((c=getchar()) != '\n');
return 0;
}
void read_string(char* p) {
int i;
char c;
for (i=0; i<MAXSIZE-1; ++i) {
if ( (c=getchar()) != '\n' ) {
p[i] = c;
} else {
break;
}
}
p[i] = '\0';
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.41.134.196
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433943163.A.756.html
→ wtchen: ......兄台我不是來問作業的 06/10 22:04
→ johnhmj: 作業連結的「補充」 06/10 22:07
→ johnhmj: C99標準未定義fflush所以不建議使用 06/10 22:09
→ james732: 好久沒看到fflush(stdin)的問題了...XD 06/10 22:40
→ lj0113: 樓上說的對, 標準不建議使用stdin 06/10 22:45
→ wtchen: johnhmj兄台: 補充在哪?還是我眼殘? 06/10 23:12
→ johnhmj: cin.clear cin.sync cin.get 06/10 23:56
→ wtchen: 我會用cin cout,但是現在在針對C的語法做特訓中... 06/11 00:09
推 firejox: gets_s 06/11 01:19
→ johnhmj: main.c → while(((c=getchar())!='\n')&(c!=EOF)); 06/11 02:00
→ johnhmj: main.cpp → cin.clear, cin.sync; 06/11 02:01
→ johnhmj: 假如while用在C++會無效,只能用在C 06/11 02:03
→ johnhmj: 修正!main.cpp → cin.clear(), cin.sync(); 06/11 02:06
推 LPH66: while(EOF) 在 C++ 要用 cin.eof(), 用法跟 C 的 feof 相同 06/11 02:10
→ LPH66: 也都要注意這兩者都是讀取失敗之"後"才會成立 06/11 02:10
→ LPH66: 就算你在尾巴, 沒讀過還是不知道沒了 06/11 02:10
推 firejox: scanf("%*[^\n]%*1[\n]"); scanf 很好用o_o 06/11 02:22
→ wtchen: 可是scanf遇到空格就停掉了 @@ 06/11 02:33