Tag: 冲洗

fflush不起作用

为什么fflush(..)对c2和c0不起作用? 如果我使用声明c0 = 0和c2 = 0它可以工作,但fflush(stdin)不起作用,我试图放在不同的地方,但它不起作用,我使用ubuntu 13.04中的代码块; int main(void) { int cod ,passou = 0, c0, c1, c2, c3, ct; float p1, p2, p3; char o; do { puts (“Informe codigo: “); scanf (“%i”, &cod); fflush (stdin); switch (cod) { case 0: c0 = c0 + 1; break; case 1: c1 = c1 + 1; […]

这是刷新C输入流的正确方法吗?

好吧,我一直在google上搜索很多关于如何正确刷新输入流的问题。 我所听到的只是关于输入流如何定义fflush()的混合论据,有些人说这样做,而其他人只是说不要这样做,我没有太多运气找到明确的效率/这样做的正确方法,大多数人都同意..我在编程方面很陌生,所以我还不知道该语言的所有语法/技巧,所以我的问题是哪种方式是最有效/最合适的解决方案清除C输入流?? 在尝试接收更多输入之前,请使用getchar()两次? 只需在输入上使用fflush()函数? 要么 这就是我认为我应该这样做的方式。 void clearInputBuf(void); void clearInputBuf(void) { int garbageCollector; while ((garbageCollector = getchar()) != ‘\n’ && garbageCollector != EOF) {} } 所以,每当我需要读取一个新的scanf(),或者使用getchar()来暂停程序时,我只需要调用clearInputBuf ..那么这三种解决方案中最好的方法是什么呢?还是有更好的选择?

每次输入后刷新标准输入 – 哪种方法不是错误的?

在Mark Lakata指出在我的问题中没有正确定义垃圾之后我想出了这个。 我会保持更新,以避免混淆。 我试图获得一个函数,我可以在提示用户输入之前调用printf(“Enter your choice:);然后跟踪scanf并确保只有提示后输入的内容才会被scanf扫描为有效输入。 据我所知,所需的function是完全冲洗标准输入的东西。 这就是我想要的。 因此,出于此function的目的, “garbage”是用户输入中的所有内容,即在该用户提示之前的整个用户输入。 在C中使用scanf() ,总是存在输入缓冲区中存在额外输入的问题。 所以我在寻找一个函数,我在每次scanf调用后调用它来解决这个问题。 我用这个 , 这个 , 这个和这个来得到这些答案 //First approach scanf(“%*[^\n]\n”); //2ndapproach scanf(“%*[^\n]%*c”); //3rd approach int c; while((c = getchar()) != EOF) if (c == ‘\n’) break; 所有这三个都是我通过命中试验找到的工作,并通过参考。 但是在我的所有代码中使用任何这些代码之前,我想知道这些代码中是否有任何错误? 编辑: 感谢Mark Lakata的第3个错误。 我在问题中纠正了它。 EDIT2: 在Jerry Coffin回答之后,我在代码中使用该程序测试了前两种方法:使用GNU GCC编译器阻止IDE 12.11(版本未在编译器设置中声明)。 #include int main() { int x = […]