¿Es posible usar scanf (“% d” & i) y usar solo el primer número ingresado, y nada más?

En primer lugar, no estoy familiarizado con c en absoluto. Sería genial si me trataran como un principiante total, lo que soy.

Entonces, el problema que tengo es que parece que no puedo hacerlo para que el progtwig solo tome la información de un número, la use y luego ignore cualquier otra información.

Por el momento tengo algo parecido a esto:

#include  #include  int main(){ int i, ret; char c, type; do { printf("Convert ASCII # to character\n"); printf("q: Quit.\n"); scanf("%c", &type); /* I use the " if(type== 'n'); " a number of times. */ /* I left the others out to simplify what my problem is. */ if(type=='1'){ printf("ASCII NUMBER -> CHAR \n"); printf("\t Please input one ASCII code \n"); int ret = scanf("%d", &i); /* My aim here is to get the amount of integers the user inputs,*/ /* and use that to categorize, but I think I am failing to do so. */ if(ret==1){ printf("\t The character for ASCII code %d is -> '%c' \n\n", i, i); break; } else{ printf("Please input one number./n/n"); break; } } } while(type=='q'); return 0; /* A problem I face a lot is where the program would terminate*/ /* even when the while conditions weren't met. */ } 

Espero que puedas entender lo que estoy tratando de hacer mirando el código anterior.
Cualquier ayuda sería muy apreciada!

el progtwig finaliza debido al carácter [enter] que queda en el búfer de entrada.
Usted da el valor de entrada para el tipo y luego para i y presiona [enter]. este [enter] es un carácter que queda en el búfer de entrada que se leerá el siguiente

 scanf("%c",type); 

por lo que el bucle sale. Por lo tanto use getchar() después

 int ret = scanf("%d", &i); 

Para borrar el búfer de entrada. y el bucle no terminará inesperadamente.
Haz estos cambios,

  printf("\t Please input one ASCII code \n"); int ret = scanf("%d", &i); getchar(); //this will read the [enter] character in input buffer /* My aim here is to get the amount of integers the user inputs,*/ /* and use that to categorize, but I think I am failing to do so. */ if(ret==1){ 

En general, me parece mejor usar fgets() (alternativamente, si está usando C99, gets_s() , aunque todavía prefiero fgets () para la máxima portabilidad a entornos de comstackdores más antiguos) para todas las entradas basadas en el usuario, entonces si es necesario usar sscanf() , strtol() y similares para convertir la cadena a otros tipos de datos, ya que esto leerá los datos por línea de una manera que es seguro para el búfer y no tendrá que preocuparse por las cosas que quedan en el búfer de entrada. Esto es especialmente cierto para la entrada basada en el usuario que nunca está bien formada (debido a errores tipográficos, etc.). scanf() realmente solo funciona bien cuando se lee desde archivos de entrada bien formados.

Vea las preguntas frecuentes de comp.lang.c que describen algunos de los problemas que ocurren a menudo cuando se usa scanf() en detalle, incluido el problema que está viendo arriba, donde parece que se omiten las entradas:

Para obtener más información sobre cualquier función de biblioteca estándar de C, en el símbolo del sistema de Linux (o Google), escriba: man 3 fgets y así sucesivamente.

Ejemplo:

 char buffer[256], type; fgets( buffer, sizeof(buffer), stdin ); if( sscanf( buffer, "%c", &type ) == 1 ) { // Was able to read a char from the buffer, now you can use it. } else { // Wasn't able to read a char from the buffer. handle it if required. }