¿Cómo está cambiando el funcionamiento de fflush(stdin) la salida en el siguiente código?
(1)
En
no
De alguna
manera
mágica
.
En primer lugar,
fflush(stdin);
Invoca
un comportamiento indefinido
.
No uses eso.
Citando
C11
, capítulo §7.21.5.2,
La función
fflush
(
énfasis mío
)
Si la
stream
apunta a una secuencia de salida o una secuencia de actualización en la que no sefflush
la operación más reciente, la funciónfflush
hace que los datos nofflush
para esa secuencia se entreguen en el entorno host para escribirse en el archivo; de lo contrario, el comportamiento es indefinido.
Dicho eso
for(j=0;j<n;j++)
{
fflush(stdin);
scanf("%d",&arr[i]);
}
me parece bastante mal, no se garantiza que
arr[i]
esté dentro de los límites.
Más bien debería ser
scanf("%d",&arr[j]);
#include <stdio.h>
int main()
{
int test_no ,count=1,i,n,j;
scanf("%d",&test_no);
fflush(stdin);
int arr1[test_no];
for(i=0;i<test_no;i++)
{
scanf("%d",&n);
printf("/n");
int arr[n];
for(j=0;j<n;j++)
{
fflush(stdin);
scanf("%d",&arr[i]);
}
for(j=1;j<=n-1;j++)
{
if(arr[j-1]>arr[j])
{
count++;
}
}
if(n==1)
{
arr1[i]=1;
}
else
{
arr1[i]=count;
}
count=1;
}
for(i=0;i<test_no;i++)
{
printf("%d/n",arr1[i]) ;
}
return 0;
}
Esta solución es a este problem .
No obtengo el resultado deseado para el tercer caso, me da un resultado de 3 o 4 dependiendo de si
fflush(stdin)
antes de
scanf("%d",arr[i])
o después de
scanf("%d",arr[i])
, indique el problema con este código.