[問題] 關於fflush的使用時機
使用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
推
06/10 22:01, , 1F
06/10 22:01, 1F
→
06/10 22:04, , 2F
06/10 22:04, 2F
→
06/10 22:07, , 3F
06/10 22:07, 3F
→
06/10 22:09, , 4F
06/10 22:09, 4F
→
06/10 22:12, , 5F
06/10 22:12, 5F
→
06/10 22:40, , 6F
06/10 22:40, 6F
→
06/10 22:45, , 7F
06/10 22:45, 7F
→
06/10 23:12, , 8F
06/10 23:12, 8F
→
06/10 23:56, , 9F
06/10 23:56, 9F
→
06/11 00:09, , 10F
06/11 00:09, 10F
推
06/11 01:19, , 11F
06/11 01:19, 11F
→
06/11 02:00, , 12F
06/11 02:00, 12F
→
06/11 02:01, , 13F
06/11 02:01, 13F
→
06/11 02:03, , 14F
06/11 02:03, 14F
→
06/11 02:06, , 15F
06/11 02:06, 15F
推
06/11 02:10, , 16F
06/11 02:10, 16F
→
06/11 02:10, , 17F
06/11 02:10, 17F
→
06/11 02:10, , 18F
06/11 02:10, 18F
推
06/11 02:22, , 19F
06/11 02:22, 19F
→
06/11 02:33, , 20F
06/11 02:33, 20F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章