c fflush

¿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 se fflush la operación más reciente, la función fflush hace que los datos no fflush 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.