Traté de ejecutar el siguiente código simple en ubuntu 15.10 pero el código se comporta de manera extraña de lo esperado
#include<stdio.h>
int main(){
int n,i=0;
char val;
char a[20];
printf("\nEnter the value : ");
scanf("%s",a);
printf("\nEnter the value to be searched : ");
scanf("%c",&val);
int count=0;
for(i=0;i<20;i++){
if(a[i]==val){
printf("\n%c found at location %d",val,i);
count++;
}
}
printf("\nTotal occurance of %c is %d",val,count);
return 0;
}
output:
--------------------------
Enter the value : 12345678
Enter the value to be searched :
Total occurance of is 0
El segundo scanf para obtener el valor a buscar parece no funcionar. El resto del código se ejecuta después del primer scanf sin recibir entrada por segunda vez.
¿Por qué no comprobar el valor de retorno de scanf? También haz que no invada la matriz.
– Ed Heal
25 de diciembre de 2015 a las 4:15
Si está TAN aullando de angustia al respecto, scanf() está funcionando exactamente como se esperaba.
– 15ee8f99-57ff-4f92-890c-b56153
25 de diciembre de 2015 a las 4:27
%c acepta ‘\n’, 12345678(Intro) -> 12345678’\n’
– Kun Ming Xie
25 de diciembre de 2015 a las 4:45
Ferit
Después del primer scanf(), en cada scanf(), en la parte de formato, coloque un espacio en blanco
Así que cambia esto
scanf("%c",&val);
dentro de esto
scanf(" %c",&val);
La razón es que scanf() regresa cuando ve una nueva línea, y cuando se ejecuta scanf() por primera vez, escribe input y presiona enter. scanf() consume su entrada pero no la nueva línea restante, por lo tanto, después de scanf() consume esta nueva línea restante.
Poner un espacio en blanco en la parte de formato hace que la nueva línea restante se consuma.
orestisf
Puedes usar fgets():
#include<stdio.h>
int main() {
int n, i = 0;
char val;
char a[20];
printf("\nEnter the value : ");
fgets(a, 20, stdin);
printf("\nEnter the value to be searched : ");
scanf("%c", &val);
int count = 0;
for (i = 0; i < 20; i++) {
if (a[i] == val) {
printf("\n%c found at location %d", val, i);
count++;
}
}
printf("\nTotal occurance of %c is %d", val, count);
return 0;
}
o claro stdin:
#include<stdio.h>
void clearstdin(void) {
int c;
while ((c = fgetc(stdin)) != EOF && c != '\n');
}
int main() {
int n, i = 0;
char val;
char a[20];
printf("\nEnter the value : ");
scanf("%s",a);
clearstdin();
printf("\nEnter the value to be searched : ");
scanf("%c", &val);
int count = 0;
for (i = 0; i < 20; i++) {
if (a[i] == val) {
printf("\n%c found at location %d", val, i);
count++;
}
}
printf("\nTotal occurance of %c is %d", val, count);
return 0;
}
Además, consulte C: Múltiples escaneos, cuando ingreso un valor para un escaneo, se salta el segundo escaneo.
printf("\nEnter the value : ");
scanf("%s",a);
printf("\nEnter the value to be searched : ");
scanf("%d",&val); // here is different
No sé por qué, pero el código anterior funciona …
scanf("%d",&val);
scanf borra los espacios en blanco excepto cuando el formato de carácter (%c) se utiliza. En el ejemplo de OP escribiendo 12345678 y al pulsar enter significa que a obtiene 12345678 y hay una nueva línea ('\n') carácter en el búfer estándar. %d lo quita pero %c no
– orestisf
25 de diciembre de 2015 a las 4:19
Puede usar ” %c” en lugar de “%c” para la cadena de formato. El espacio en blanco hace que scanf() omita los espacios en blanco (incluidas las nuevas líneas) antes de leer el carácter.
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
1)
scanf("%c",&val);
–>scanf(" %c",&val);
2)i<20
–>i<20 && a[i]
3)scanf("%s",a);
–>scanf("%19s", a);
(i<20
–>ia[i]
)– PIXY AZUL
25 de diciembre de 2015 a las 3:47
ia[i]
mi error tipográfico comoa[i]
– PIXY AZUL
25 de diciembre de 2015 a las 4:00
¿Por qué no comprobar el valor de retorno de
scanf
? También haz que no invada la matriz.– Ed Heal
25 de diciembre de 2015 a las 4:15
Si está TAN aullando de angustia al respecto, scanf() está funcionando exactamente como se esperaba.
– 15ee8f99-57ff-4f92-890c-b56153
25 de diciembre de 2015 a las 4:27
%c acepta ‘\n’, 12345678(Intro) -> 12345678’\n’
– Kun Ming Xie
25 de diciembre de 2015 a las 4:45