看板 C_and_CPP 關於我們 聯絡資訊
使用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
johnhmj: 未看先貼 C++ https://goo.gl/iRWqV9 06/10 22:01
wtchen: ......兄台我不是來問作業的 06/10 22:04
johnhmj: 作業連結的「補充」 06/10 22:07
johnhmj: C99標準未定義fflush所以不建議使用 06/10 22:09
johnhmj: 相同的問題 http://goo.gl/2uGUBB 06/10 22:12
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