[問題] 關於fflush的使用時機

作者: wtchen (沒有存在感的人)   2015-06-10 21:32:39
使用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';
}
作者: johnhmj (耗呆肥羊)   2015-06-10 22:01:00
未看先貼 C++ https://goo.gl/iRWqV9
作者: wtchen (沒有存在感的人)   2015-06-10 22:04:00
......兄台我不是來問作業的
作者: johnhmj (耗呆肥羊)   2015-06-10 22:07:00
作業連結的「補充」C99標準未定義fflush所以不建議使用相同的問題 http://goo.gl/2uGUBB
作者: james732 (好人超)   2015-06-10 22:40:00
好久沒看到fflush(stdin)的問題了...XD
作者: lj0113 (tiny legend)   2015-06-10 22:45:00
樓上說的對, 標準不建議使用stdin
作者: wtchen (沒有存在感的人)   2015-06-10 23:12:00
johnhmj兄台: 補充在哪?還是我眼殘?
作者: johnhmj (耗呆肥羊)   2015-06-10 23:56:00
cin.clear cin.sync cin.get
作者: wtchen (沒有存在感的人)   2015-06-11 00:09:00
我會用cin cout,但是現在在針對C的語法做特訓中...
作者: firejox (Tangent)   2015-06-11 01:19:00
gets_s
作者: johnhmj (耗呆肥羊)   2015-06-11 02:00:00
main.c → while(((c=getchar())!='\n')&(c!=EOF));main.cpp → cin.clear, cin.sync;假如while用在C++會無效,只能用在C修正!main.cpp → cin.clear(), cin.sync();
作者: LPH66 (-6.2598534e+18f)   2015-06-11 02:10:00
while(EOF) 在 C++ 要用 cin.eof(), 用法跟 C 的 feof 相同也都要注意這兩者都是讀取失敗之"後"才會成立就算你在尾巴, 沒讀過還是不知道沒了
作者: firejox (Tangent)   2015-06-11 02:22:00
scanf("%*[^\n]%*1[\n]"); scanf 很好用o_o
作者: wtchen (沒有存在感的人)   2015-06-11 02:33:00
可是scanf遇到空格就停掉了 @@

Links booklink

Contact Us: admin [ a t ] ucptt.com