que para limpiar libreria funciona funcion flushall como c input io scanf getchar

para - el buffer de entrada en getchar() y scanf



libreria para fflush stdin (2)

Lo siento porque no puedo pensar en ningún título mejor. Tengo un problema para tratar con la entrada. Aquí está mi código de prueba que ingresa en una matriz de cadenas y luego lo imprime en la pantalla de nuevo, bastante simple.

El primer código de prueba funciona bien como se esperaba

#include <stdio.h> int main() { int i, index; char d, c[20]; scanf("%d", index); for(i=0; i<index; i++){ *(c+i) = getchar(); if (*(c+i)==''$'') break; } printf("the string is %s", c); return 0; }

el segundo código de prueba, utilicé el puntero pero c [i] en su lugar y el programa no se ejecutó. Es bastante extraño ya que * (c + i) y c [i] es equivalente

Cambié

*(c+i) = getchar(); // (0) if (*(c+i)==''$'')

a

c[i] = getchar(); // (1) if (c[i]==''$'')

o

c[i] = getchar(); // (2) if (*(c+i)==''$'')

o

*(c+1) = getchar(); // (3) if (c[i]==''$'')

el (3) funciona bien, no ocurrió ningún problema, pero en (1) y (2), la salida es solo el primer carácter de la entrada, independientemente de cuánto tiempo la entrada de la cadena

Ejemplo: escriba asdads $

salida: a

Entonces, el problema radica en el código getchar (). Hay una diferencia entre utilizar el puntero y el elemento directo de la matriz para obtener la entrada, pero no sé cuál es el problema aquí.

Llamaré a este problema es "A" porque me encuentro con varios problemas ya que intenté con diferentes tipos de código con scanf y getchar

Ahora cambio el getchar () en cada caso en scanf

(0) (1) (2) (3): el problema A sucede. Ahora ninguno de ellos funciona bien con scanf. Con getchar, al menos (0) y (3) funcionan.

Ahora, en lugar de ingresar datos directamente en c, ingreso datos en d y paso ese valor de d a c [i]

Usind d = getchar (), el problema A pasa a los 4 casos. scanf da el mismo resultado

Lo que es extraño es cuando presiono enter, el programa se rompe automáticamente y la salida se imprime en pantalla

Eso es solo una prueba, pero aquí está el problema actual con el que estoy tratando

int z; printf("continue? [1=yes/0=no] "); scanf("%d", &z); switch (z){ case 1: printf("next info is: "); scanf("%d", &x); break; case 0: *end = ''/0''; break; }

Esto funciona bien, usar scanf con% d está bien, esperar que golpee 1 o 0 para continuar el proceso. Sin embargo, el problema ocurrió con estos 2 códigos, que se espera que realicen lo mismo. No me esperan para golpear y / n sino que van directamente al final

char z; printf("continue? [y/n] "); z=getchar(); // using getchar if(z==''y''){ printf("next info is: "); scanf("%d", &x); } else{ *end = ''/0''; }

y

char z; printf("continue? [y/n] "); z=getchar(); switch(z==''y''){ case 1: printf("next info is: "); scanf("%d", &x); break; case 0: *end = ''/0''; break; }

Así que no sé cuál es el problema con el código que uso y por qué usar el puntero para obtener datos es diferente de usar el arreglo directamente.


¡Sí! en primer lugar scanf("%d",&index); debe ser usado lo has usado de manera incorrecta. Tienes que pasar la dirección de la variable.

En segundo lugar, en el búfer de entrada, el ''/ n'' presionado después de una entrada dada está allí. Tienes que poner un getchar ficticio aquí que consumirá cualquier extra ''/ n''.

scanf("%d", index); getchar(); for(i=0; i<index; i++){ *(c+i) = getchar(); if (*(c+i)==''$'') break; }

Ahora, en el segundo caso (donde utiliza un int como entrada) funciona como ''/ n'' (o cualquier espacio en blanco), el caracter es ignorado por el scanf (la especificación de formato es "% d" no "% c").


#include <stdio.h> int main() { int i, index; char d, c[20]; scanf("%d",index);//*2 for(i=0; i<index; i++){ c[i] = getchar(); // (1) if (c[i]==''$'') break; } printf("%d",index); //*1 printf("the string is %s", c); return 0; }

Si imprime el no. del índice (* 1) sabrá cuando algún índice de situación = 1. El único espacio es para NULL en la cadena. Por lo tanto, hay algún problema de su programa y no es el problema de (1) (2) ( 3).

Puede cambiar el programa:

* 2 a scanf("%d",&index);

Después de eso, cumplirás (1) (2) (3) con éxito.