La plataforma de Yahoo Respuestas cerrará definitivamente el próximo 4 de mayo de 2021 y solo estará disponible en modo de lectura. Ningún otro producto de Yahoo ni tu cuenta personal se verán afectados por este cambio. Si necesitás más información sobre el cierre de Yahoo Respuestas y cómo descargar tus datos podés acceder a esta página de ayuda.

Anónimo
Anónimo preguntado en Computadoras e internetDiseño y Programación · hace 8 meses

¿Que esta mal con este código en C?

La actividad me solicitaba crear un código que pudiera contar vocales, símbolos, números y espacios. Hice todo tal cual la guía pero al momento de ingresar el los caracteres, no me arroja ningún resultado.

#include <stdio.h>

#include <string.h>

int main (void){

 char c[100];

 int i=0, voc=0, sig=0, esp=0, num=0;

 printf("Ingrese texto\n");

 gets(c);

 while (c[i]!='\0'){

  if(c[i]=='a'||c[i]=='e'||c[i]=='i'||c[i]=='o'||c[i]=='u'||c[i]=='A'||c[i]=='E'||c[i]=='I'||c[i]=='O'||c[i]=='U')

  voc++;

 else if(c[i]=='1'||c[i]=='2'||c[i]=='3'||c[i]=='4'||c[i]=='5'||c[i]=='6'||c[i]=='7'||c[i]=='8'||c[i]=='9'||c[i]=='0')

  num++;

  else if(c[i]==' ')

  esp++;

  else if(c[i]=='!'||c[i]=='"'||c[i]=='#'||c[i]=='$'||c[i]=='%'||c[i]=='&'||c[i]=='/'||c[i]=='('||c[i]==')'||c[i]=='?'||c[i]=='¿'||c[i]=='*'||c[i]=='+'||c[i]=='-'||c[i]=='*'||c[i]=='.'||c[i]==','||c[i]=='@'||c[i]=='|')

  sig++;

  else

  i++;

 }

 printf("la cantidad de vocales es: %d",voc);

 printf("la cantidad de signos es: %d",sig);

 printf("la cantidad de espacios es: %d",esp);

 printf("la cantidad de numeros es: %d",num);

 return 0;

}

Actualización:

Intente anteriormente con la funcion fgets, pero me da error al compilar y ejecutar

Attachment image

6 respuestas

Calificación
  • hace 8 meses

    Uff pero no uses tantos `else`. Úsa un `else` por cada `if`.

    Tienes que colocar operadores lógicos en los `if`, no lo haces bien (con paréntesis claramente definidos). Por ejemplo:

    // Para detectar vocales:

    if ((c[n]=='a') || (c[n]=='e') || (c[n]=='i') || (c[n]=='o') || (c[n]=='u')){

     //Se cuenta una vocal:

      voc++; }

    // Para detectar consonantes:

    if ((c[n]!='a') || (c[n]!='e') || (c[n]!='i') || (c[n]!='o') || (c[n]!='u')){

     //Se cuenta una consonante:

      cons++; } // Yo ésto no lo haría como un `else`, lo dejaría como `if`.

    `gets` no es un inconveniente mientras estés practicando como aprendiz. Úsa lo que necesites para capturar cadenas.

    Es un programa en C no en C++, utiliza la extension '.c' no '.cpp'.

  • Anónimo
    hace 6 meses

    Ni idea apenas termine informática basica

  • hace 8 meses

    Tienes muchos else acumulados, intenta cambiarlos a alternativas simples, osea, todos esos else if que estan dentro del else if cambialos solo por if.

    Lo que no comprendo es que si es C, porque la extensión del archivo es .cpp .

    Es C o C++??

    Edit: No será mejor utilizar un bucle for para contar variables?? Deberías de intentar para ver como te va.

    Saludos

  • hace 8 meses

    Llevo años sin programar, pero creo que se lo que pasa.

    El problema está en dónde has puesto el i++. Tu programa hace lo siguiente:

    - Examina si hay una vocal.

    - Examina si hay un numero.

    - Examina si hay un espacio.

    - Examina si hay un simbolo.

    - Si no ha encontrado ni una vocal, ni un numero, ni un espacio, ni un simbolo salta al siguiente caracter.

    Entonces, en el momento en que llega a uno de esos caracteres se queda bloqueado. Tiene que saltar al siguiente caracter si o si, no solo si encuentra una consonante.

    La solución en principio es sencilla: tienes que quitar el "else" de la linea que hay justo antes del i++;

  • hace 8 meses

    No uses la función gets, usa fgets en su lugar.

  • hace 8 meses

    .................

¿Aún tienes preguntas? Pregunta ahora para obtener respuestas.