- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为什么 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;
ct = ct + 1;
break;
case 2:
c2 = c2 + 1;
ct = ct + 1;
break;
case 3:
c3 = c3 + 1;
ct = ct + 1;
break;
default:
puts ("Valor invalido");
}
getchar();
puts ("Deseja informar mais um voto?");
fflush (stdin);
scanf("%c",&o);
if (o == 'S' || o == 's' ) {
passou = 0;
} else if (o == 'N' || o == 'n' ) {
passou = 1;
} else {
puts ("Opcao invalida");
}
} while ( passou != 1 );
p1=(c1/ct)*100;
p2=(c2/ct)*100;
p3=(c3/ct)*100;
if (c1 > c2 && c1 > c3 && c1 > c0 ) {
puts ("Candidato numero 1 eh o vencedor");
} else if (c2 > c1 && c2 > c3 && c3 > c0) {
puts ("Candidato numero 2 eh o vencedor");
} else if (c3 > c1 && c3 > c2 && c3 > c0) {
puts ("Candidato numero 3 eh o vencedor");
} else {
puts ("Numero de votos em branco eh maior do que todos os outros candidatos");
}
printf ("\nTotal de votos do candidato 1: %d", c1);
printf ("\nTotal de votos do candidato 2: %d", c2);
printf ("\nTotal de votos do candidato 3: %d", c3);
printf ("\nTotal de votos em branco: %d", c0);
printf ("\nPercentual de votos do candidato 1: %.2f", p1);
printf ("\nPercentual de votos do candidato 2: %.2f", p2);
printf ("\nPercentual de votos do candidato 3: %.2f", p3);
return 1;
}
最佳答案
在您的系统 ubuntu 13.04(Unix 或 Linux)上调用 fflush (stdin);
是未定义的行为!
ostream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined
要学习正确刷新输入缓冲区的技巧,您可以使用以下一些实际从输入缓冲区读取和丢弃不需要的字符的代码片段。在读取实际数据之前,您可以将其用作 fflush。 read this FAQ entry.
对于 C:
while ((ch = getchar()) != '\n' && ch != EOF);
对于 C++:
while ((ch = cin.get()) != '\n' && ch != EOF);
但是,如果您在输入流中没有数据时调用它们,程序将等待直到有数据,这会给您带来不良结果。
阅读:@ Keith Thompson的回答:"Alternative to C library-function fflush(stdin)
"
编辑:
在某些平台上,fflush(stdin)
已完全定义(作为该平台上的非标准扩展)。主要示例是一个众所周知的系统系列,统称为 Windows。微软的规范:
Flushes a stream
The
int fflush(FILE *stream )
function flushes a stream. If the file associated with stream is open for output,fflush
writes to that file the contents of the buffer associated with the stream. If the stream is open forinput
,fflush
clears the contents of the buffer.fflush
negates the effect of any prior call to ungetc against stream. Also,fflush(NULL)
flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.
关于c - fflush 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752759/
我认为 fsync() 在内部执行 fflush(),所以在流上使用 fsync() 是可以的。但是在网络 I/O 下执行时我得到了意想不到的结果。 我的代码片段: FILE* fp = fopen(
我有一个实现多线程网络代理的基本草图: FILE *proxy_log_file; static void SIGUSR1_handler(int sig) { (void)sig;
我遇到了 this page这说明了创建悬挂点的常见方式。 下面的代码通过返回局部变量的地址来说明悬空指针: // The pointer pointing to local variable bec
所以我写了一个测试程序,这是代码 #include #include int main(void) { int i; printf("%s", "entering\n");
有来自 cplusplus.com site 的简单代码 #include char mybuffer[80]; int main() { FILE *pFile; pFile =
我正在尝试使用以下代码将 2D 表格打印到我的终端: #include #include #include #include #include #include char getch()
我正在用 C 语言创建一个非常简单的程序执行计时器。我将在下面提供示例代码。问题是 fflush(NULL) 在以 Ctrl+C(即 SIGINT 信号)。它们有时仍会在 Estimated runn
我正在尝试用 C 语言制作一个时钟,但是屏幕没有正确清除,它只是不断地打印到一个新行。我如何不正确地使用 fflush? #include #include #include int main(
这个问题在这里已经有了答案: Using fflush(stdin) (7 个答案) How can one flush input stream in C? (8 个答案) 关闭 4 年前。 我似
我有这段代码:当第一个 child 向第二个 child 发送数据时,程序卡住了,第二个 child 做 fscanf 然后卡住了,因为他无法阅读我找不到它的原因。请帮助我找出如何确保 fflush
我很抱歉这个愚蠢的问题。我有 C 程序提示用户输入年龄和姓名然后将年龄和姓名打印到屏幕上。这是我从书上读到的练习。 这个程序: #include int main (void) { int a
我不确定我是否正确理解了 C 中刷新的工作原理。我就是无法按照多本手册和引用书中的描述让它工作。这是一个带有注释的示例: #include int main(void) { int x;
来自 std::fflush 文档(http://en.cppreference.com/w/cpp/io/c/fflush): Causes the output file stream to be
为什么 fflush(..) 对 c2 和 c0 不起作用? 如果我使用声明 c0 = 0 和 c2 = 0 它有效,但 fflush(stdin) 无效,我试着把在不同的地方但它没有用,我在 ubu
#include int main() { int test_no ,count=1,i,n,j; scanf("%d",&test_no); ffl
我开始编程并了解了以下命令fflush(stdout);。我明白为什么大多数平台都需要它,但我仍然问自己一些问题...... 1. \n 不是应该在 msys2 上缓冲吗,因为它是行缓冲的? (薄荷)
我似乎无法弄清楚这段代码有什么问题: #include #include #include #include #define MAX 100 #define TRUE 1 #define FA
#include int main() { int test_no ,count=1,i,n,j; scanf("%d",&test_no); ffl
我有以下代码, fflush(stdin); print("Enter y/n"); scanf("%c",&a); 这里,它在给出输入之前退出。看起来问题是因为它没有刷新可能包含一些垃圾字符的输入缓
因此,在 Google 上快速搜索用于清除输入缓冲区的 fflush(stdin) 会发现许多网站警告不要使用它。然而,这正是我的计算机科学教授教授全类的方式。 使用 fflush(stdin) 有多
我是一名优秀的程序员,十分优秀!