Ayuda con codigo de preguntas y respuestas

Iniciado por carlos112233, 24 Septiembre 2017, 21:27 PM

0 Miembros y 1 Visitante están viendo este tema.

carlos112233

Hola, soy nuevo en la programacion y me gustaria si me pueden aportar con un programa que he realizado. Este programa realiza una pregunta en ingles y si el usuario responde correctamente a traves del teclado sigue con la siguiente pregunta, si no, espera a que responda en forma correcta.
Agradeceria si alguien me puede apoyar con otra forma mas elegante o menos bruta para realizar el programa. El codigo es el siguiente:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main(){
      char c1[15]="hi", c2[15];

      printf("hello\n");
      etiqueta_1:
      scanf("%s",&c2[0]);

      int n;

      n = strcmp(c1,c2);

      if(n==0){
               int l;
               char c3[30], c4[30]="Iam good.How are you?";
         
               printf("How are you?\n");
               scanf("%s",&c3[0]);
         
               l = strcmp(c3,c4);  
         
               if(n==0){
                        int m;
                        char c5[30], c6[30]="A little.Are you American?";
         
                        printf("Good.Do you speak English?\n");
                        scanf("%s",&c5[0]);
         
                        m = strcmp(c5,c6);
             
                        if(n==0){
                                 int o;
                                 char c7[30], c8[30]="Where are you from?";
         
                                 printf("yes\n");
                                 scanf("%s",&c7[0]);
         
                                 o = strcmp(c7,c8);
                                }
                       }
               }
         
   
     if(n>0){
             printf("Vuelva a intentarlo\n");
             goto etiqueta_1;
            }
             
    else{
             printf("Vuelva a intentarlo\n");
             goto etiqueta_1;
        }


system("pause");
return 0;
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

Tucho

Lee los comientarios del codigo:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main(){ //Pongamos el int, no seamos tan cabezas
char c1[15]="hi", c2[15];

printf("hello\n");
etiqueta_1:
scanf("%s",&c2[0]); //poner &c2[0] es lo mismo que poner c2, Además, yo utiilizari scanf("%15s",c2) para que no se pueda poner mas que el largo del string.
//Si no se puede usar: fgets(c2,15,stdin)
int n;

n = strcmp(c1,c2); //Esto podes ponerlo directamente cono condicion del if..

if(n==0){ // if(!strcmp(c1,c2))
int l;
char c3[30], c4[30]="Iam good.How are you?";

printf("How are you?\n");
scanf("%s",&c3[0]);

l = strcmp(c3,c4);

if(n==0){ //Aca es: if(l==0)
int m;
char c5[30], c6[30]="A little. Are you American?";

printf("Good.Do you speak English?\n");
scanf("%s",&c5[0]);

m = strcmp(c5,c6);

if(n==0){ //Aca es: if(m==0)
int o;
char c7[30], c8[30]="Where are you from?";

printf("yes\n");
scanf("%s",&c7[0]);

o = strcmp(c7,c8); //si pensas hacer la conversacion muy larga, tendrias que ver como hacer mas escalable el program, y no tener que escribir tanto(Ver al final).
                  //Si queres verificar que el usuario responde bien en todos los casos tendrias que ver que pasa cuando m!=0 y l!=0, por que esto hace el goto solo cuando falla el primero de todos. Tendrias que usar el mismo n en todos lados de ultima..
}
}
}


if(n>0){ //Este if(n>0) y lo que hay en el else, pueden estar juntos, directamente usar el else..
printf("Vuelva a intentarlo\n");
goto etiqueta_1;
}

else{
printf("Vuelva a intentarlo\n");
goto etiqueta_1;
}

system("pause"); //Ojo con las llamadas a system..
return 0;
}

//Yo personalmente no me gusta el "goto", yo haria algo como:

do{
scanf("%s", c2);
printf("Estoy aca y voy a entrar aca hasta que le acertes a la frase..")
}while(strcmp(c1,c2));

en lugar de lo que haces vos:

lala:
scanf("%s", c2);
if(strcmp(c1,c2))
goto lala:

//Por otro lado, si queres hacer que puedas agregar tantas frases como quieras, sin tener que cambiar tanto codigo, podrias hace algo como:

#include <stdio.h>
#include <string.h>
#define NUM 4
int main(){
char *respuestas[NUM]={"hi", "Iam good. How are you?", "A little. Are you American?", "Where are you from?"};
char *preguntas[NUM] = {"Hello\n", "How are you?\n", "Good. Do you speak English?\n", "yes\n"};
int i;
char aux[30] ={0};
for(i=0; i<NUM; i++){
do{
int j;
for(j=0; j<strlen(aux); ++j)
aux[j]=0;
printf(preguntas[i]);
scanf("%s", aux);
}while(strcmp(aux,respuestas[i]));
}
getchar(); //Lo mismo que el system("sleep")..
}


Ojo que el ultimo main no esta ni revisado ni compilado.