Why fflush(..)
不起作用c2
and c0
?
如果我使用声明c0 = 0
and 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);
是未定义的行为!
int fflush(FILE *ostream);
ostream 指向输出流或更新流,其中
最近的操作没有输入,fflush函数会导致任何
该流的未写入数据将被传送到主机环境
写入文件;否则,行为是未定义的
要学习正确刷新输入缓冲区的技巧,您可以使用以下一些代码片段来实际读取并丢弃输入缓冲区中不需要的字符。您可以在读取实际数据之前将其用作 flush。阅读此常见问题解答条目。
for C:
while ((ch = getchar()) != '\n' && ch != EOF);
for C++:
while ((ch = cin.get()) != '\n' && ch != EOF);
但是,如果在输入流中没有数据时调用这些方法,程序将等到有数据为止,这会给您带来不良结果。
Read: @基思·汤普森的回答:“C 库函数的替代方案fflush(stdin)"
Edit:
有一些平台fflush(stdin)
已完全定义(作为该平台上的非标准扩展)。主要的例子是一个众所周知的系统系列,统称为 Windows。微软的规范:
刷新流
The int fflush(FILE *stream )
函数刷新流。如果文件关联于
流已打开以供输出,fflush
将内容写入该文件
与流关联的缓冲区。如果该流开放input
, fflush
清除缓冲区的内容。 fflush
否定了
先前对 ungetc 的任何调用对流的影响。还,fflush(NULL)
刷新所有为输出而打开的流。流在之后保持打开状态
的电话。 fflush 对无缓冲流没有影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)