[问题] 关于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