¿Qué opinas del código fuente strcpy?
# include & ltmath.h & gt/*Definición de funciones matemáticas*/
# include & ltconio. h & gt/*Función de operación de pantalla*/
# include & ltstdio.h & gt/*Función de E/S*/
# include & ltstdlib.h & gt/* Función de biblioteca*/
# include & ltstdarg.h & gt/*Lista de parámetros de longitud variable*/
# include & ltstdarg.h & gt/*Función de gráficos*/< / p>
# include & ltstring.h & gt/*Función de cadena*/
# include & ltctype.h & gt/*Función de operación de caracteres*/
#define ARRIBA 0x48 /*Tecla cursor arriba*/
#definir ABAJO 0x50 /*Tecla cursor abajo*/
#Definir izquierda 0x4b /*Tecla cursor izquierda*/ p>
#define right 0x4d /*Botón derecho del cursor*/
#define ENTER 0x0d /* Enter */
void * rar/*Variable global, guardar imagen del cursor* /
estructura tipo paleta paleta; /*Usar información de paleta*/
int GraphDriver/*Controlador de dispositivo de gráficos*/
int GraphMode/ *Valor del modo de gráficos*/
int código de error; /*Código de error*/
int MaxColors/*Número máximo de colores disponibles*/
int MaxX , MaxY/*La resolución más alta de la pantalla*/
Giro de doble cara /*La proporción de píxeles de la pantalla*/
void draw boder(void); p>
inicialización nula (void); /*función de inicialización*/
computadora nula (void); /*función de cálculo de la calculadora*/
void changetextstyle (fuente int, int dirección, int charsize); /*Función de cambio de estilo de texto*/
void m window(char * header) /*Función de ventana*/
int tecla especial(void) ;/*Obtener la función de tecla especial*/
int arrow();/*Establecer la función de cursor de flecha*/
/*Función principal*/
int main()
{
initialize();/*Configurar el sistema en modo gráfico*/
Computadora();/*Ejecutar cálculos * /
closegraph(); /*El sistema cierra el modo de gráficos y vuelve al modo de texto*/
return(0); >
}
/*Configurar el sistema para ingresar al modo de gráficos*/
inicialización nula (void)
{
int xasp, yasp /*Se utiliza para leer la relación de aspecto en las direcciones X e Y*/
GraphDriver = DETECT/*Detectar automáticamente la pantalla*/
iniciar gráfico (y controlador de gráfico & GraphMode, "";
/*Inicializar el sistema de gráficos*/
código de error = resultado del gráfico() /*Leer el resultado de la inicialización*/
p>
if( ErrorCode!= grOk) /*Si ocurre un error durante el proceso de inicialización*/
{
printf("Error del sistema de gráficos: %s\n " ,
grapherrormsg(código de error)); /*Mostrar código de error*/
Salir (1); /*Salir*/
} p >
obtener paleta(& paleta);/*Leer información del panel*/
colores máximos = obtener maxcolor()+1;/*Leer el valor máximo de color*/
MaxX = obtener MaxX(); /*Leer tamaño de pantalla*/
MaxY = obtener MaxY() /*Leer tamaño de pantalla*/
getaspectratio(&
}
/*Función de calculadora*/
Equipo no válido (no válido)
{
struct viewporttype vp/*Definir variables de tipo de ventana gráfica*/
int color, alto, ancho;
int x, y, x0, y0, I, j, v, m, n, act , flag = 1;
float num1=0, num2=0, result; /*operandos y variables de resultado de cálculo*/
char cnum[5], str2[ 20]= {""},c,temp[20]= { " " };
Char·str1[]="1230.456+-789*/qc=^%";/*Definición Símbolo de cadena que se se muestra en el gráfico del botón */
mwindow("Calculadora"); /*Mostrar la ventana principal*/
Color = 7 /*Establecer el valor de gris */; p>
getview settings(&VP);/*Leer el tamaño de la ventana actual*/
Width=(VP . right+1)/10;/*Ancho del botón de configuración*/
height =(VP . bottom-10)/10 /*Establece la altura del botón*/
x =Ancho/2 /*Establece el valor de las coordenadas de x */
y = height/2; /*Establece el valor de las coordenadas de y*/
setfillstyle(SOLID_FILL, color+3);
bar(x+ Ancho *2, y, x+7 *ancho, y+alto);
/*Dibuja una barra rectangular bidimensional para mostrar los operandos y resultados*/
setcolor(color+ 3);/*Establecer línea de borde verde claro*/
Rectángulo (x+ancho*2, y, x+7*ancho, y+alto);
/*Dibujar una línea de borde rectangular */
setcolor(red);*Establecer color en rojo*/
out textxy(x+3 *width, y+height/2, "0 .
");/*Cadena de salida "0"*/
x = 2 *Width-Width/2; /*Establece el valor de las coordenadas de x*/
y = 2 * Altura + altura/2 /*Establecer el valor de las coordenadas de y*/
for(j = 0; j & lt4;++j) /*Dibujar un botón*/
{
for(I = 0;i<5;++i)
{
setfillstyle(SOLID_FILL, color);
setcolor(red);
bar(x, y, x+width, y+height /*Dibujar una barra rectangular*/
Rectangle(x, y, x+); ancho, y+alto);
sprintf(str2, " %c ", str 1[j * 5+I]);
/*Guardar los caracteres en str2*/
outtextxy(x+(ancho/2), y+alto/2, str 2);
x = x+ancho+(ancho/2); /*Mover coordenadas de columna* /
}
y +=(alto/2)* 3;/*Mover coordenadas de línea*/
x = 2 *Ancho-Ancho/2 ;/*Coordenadas de columna de altura*/
}
x0 = 2 * ancho;
y0 = 3 * alto
x; = x0
y = y0
gotoxy(x, y /*Mueve el cursor a la posición x, y*/
flecha(); /*Mostrar el cursor */
putimage(x, y, rar, XOR _ PUT
m =
n = 0; /p>
strcpy(str2, " "); /*Establece str2 como una cadena vacía*/
while((v=specialkey())!=45) /*Presiona Alt+x para finalizar el programa; de lo contrario, ejecute el siguiente bucle*/
{
while((v=specialkey())!=ENTER) /*No se ingresa cuando se presiona la tecla */
{
putimage(x, y, rar, XOR _ PUT /*Mostrar imagen del cursor*/
If(v==RIGHT); ) /*Mover flecha hacia la derecha Cálculo de nueva posición */
if (x & gt; = x6 *ancho)
/*Si te mueves hacia la derecha y te mueves a al final, muévase a la posición del carácter del extremo izquierdo */
{
x = x0
m = 0;
}
Otros
{
x = x+ancho+ancho/2
m++; * En caso contrario, mueve hacia la derecha y hacia abajo Una posición de carácter*/
If(v==LEFT) /*Cálculo de la nueva posición al mover la flecha hacia la izquierda*/
if(x & lt;=x0) p>
{
x = x6 *ancho
m =
}/*Si te mueves a la cabeza, luego a la izquierda, luego muévete a la posición del personaje más a la derecha*/
Otros
{
x = x-width-width/2;
m-;
}/* De lo contrario, muévase a la izquierda a la posición del carácter anterior*/
If(v= =UP) /*Nueva posición al mover la flecha hacia arriba Cálculo*/
if(y & lt;=y0)
{
y = y 4 *height+height/2;
n = 3;
}/*Si se mueve a la cabeza y luego se mueve hacia arriba, se mueve a la posición inferior del personaje*/
Otro
{
y = y-altura-altura
ht/2;
n-;
}/* De lo contrario, muévase al bit superior de un carácter*/
If(v==DOWN) /* Cálculo de nueva posición al mover la flecha hacia abajo*/
If (y & gt= 7 *high)
{
y = y0
n = 0;
}/*Si se mueve hasta el final y luego se mueve hacia abajo, se mueve a la posición superior del personaje*/
Otro
{
y = y+height+height/2;
n++;
}/*De lo contrario, pasa a la siguiente posición del carácter*/ p>
putimage(x,y,rar,XOR_PUT);/*Mostrar flecha del cursor en la nueva posición*/
}
c = str 1[n * 5+ m ];/*Guardar los caracteres en la variable c*/
If (isdigit (c) || c = ' . ')/*Determinar si es un número o un punto decimal*/
{
Si (flag = -1)/*Si la bandera es -1, significa un número negativo*/
{
strcpy(str2, "-") ;/*Concatenar los signos menos en una cadena*/
flag = 1;
}/*Restaurar el valor de la bandera a 1 */
sprintf( temp, " %c ", c); /* Guardar los caracteres en la variable de cadena temp */
strcat(str2, temp /* Connect); la cadena en temp a str2 */
setfillstyle(SOLID_FILL, color+3);
Bar(2*width+width/2, height/2, 15*width/2 , 3*alto/2);
outtextxy(5 *ancho, alto, cadena 2); /*display string*/
}
if( c=='+')
{
num 1 = atof(str 2);/*Convierte el primer operando a un número de punto flotante*/
strcpy(str2," "); /*Empty str2 */
act = 1; /*Calcular y agregar valor de bandera*/
setfillstyle(SOLID_FILL, color+3) ;
Bar(2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2);
out textxy(5*ancho, alto , "0. ");/*Mostrar cadena*/
}
if(c=='-')
{
If (strcmp(str2, " ")==0) /*Si str2 está vacío, significa un signo menos, no un signo negativo*/
flag =-1; bandera de número negativo*/
Otros
{
num 1 = atof(str 2);
strcpy(str2, " "); /* Vaciar str2 */
act = 2; /* Calcular el valor del indicador de resta */
setfillstyle( SOLID_FILL, color+3) ;
Barra (2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2 /*Dibujar un rectángulo*/); p>
out textxy(5 *ancho, alto, "0.
");/*Mostrar cadena*/
}
}
if(c=='* ')
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de coma flotante*/
strcpy(str2, " "); /p>
act = 3; /*Calcular el valor del indicador de multiplicación*/
setfillstyle(SOLID_FILL, color+3); * ancho / 2, 3 * alto / 2);
out textxy (5 * ancho, alto, "0."); /* mostrar cadena */
} p>
if(c=='/')
{
num 1 = atof(str 2);/*Convertir la segunda operación Convertir número a número de coma flotante */
strcpy(str2, " "); /* Vaciar str2 */
act = 4; /* Realizar el cálculo del valor del indicador de división */ p>
setfillstyle(SOLID_FILL, color+3);
Bar(2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2);
out textxy(5 *ancho, alto, "0.");/*display string*/
}
if(c=='^ ')
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de punto flotante*/
strcpy(str2 , " ");/* Vaciar str2 */
act = 5;/*Calcular el valor del símbolo de poder*/
setfillstyle(SOLID_FILL, color+3);/*Establecer para rellenar con un sólido verde claro */
Bar (2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2); /*Dibuja un rectángulo*/
fuera textxy; (5 *ancho, alto, "0.");/*display string*/
}
if(c=='% ')
{
num 1 = atof(str 2); /*Convierte el segundo operando a un número de coma flotante*/
strcpy(str2, " ") Vaciar str2 *); /
act = 6; /* Calcular el valor del indicador de exponenciación modular */
setfillstyle(SOLID_FILL, color+3) /*Establecer Para rellenar con entidades de color verde claro*/<); /p>
Bar (2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2); /*Dibuja un rectángulo*/
out textxy( 5 * ancho, alto, " 0.
");/*Mostrar cadena*/
}
if(c=='= ')
{
num 2 = atof(str 2);/*Convertir el segundo operando a un número de punto flotante*/
Cambiar (act) /*Calcular según el símbolo de operación*/
{
Caso 1: Resultado = num 1+num 2; /*Sumar*/
Caso 2: Resultado = num 1-num 2;
Caso 3: Resultado = num 1 * num 2; /*Hacer multiplicación*/
Caso 4: Resultado = num 1/núm 2; */
Caso 5: Resultado = pow(num1, num 2); /*Hacer x la potencia de y*/
Caso 6: Resultado = fmod(num1, num 2); Break; /*Hacer operación modular*/
}
setfillstyle(SOLID_FILL, color+3); /*Establecer para rellenar con entidades de color verde claro*/ p>
Bar(2*width+width/2, height/2, 15*width/2, 3*height/2); /*cubrir el área de resultados*/
sprintf(temp). , " %f ", resultado); /*Guardar el resultado en temp*/
outtextxy(5 *ancho, alto, temperatura /*Mostrar el resultado*/
); }
if(c=='c ')
{
num 1 = 0; /*Restablece ambos operandos a 0, el signo es 1* /
num 2 = 0;
bandera = 1;
strcpy(str2, " "); p>setfillstyle(SOLID_FILL, color+3); /*Establecer para rellenar con entidades de color verde claro*/
Barra (2 * ancho + ancho / 2, alto / 2, 15 * Ancho/2, 3); * Height/2); /* Cubrir el área de resultados */
out textxy (5 * Ancho, Alto, " 0.
");/*Display string*/
}
if(c == ' Q ')exit(0); /*Si se selecciona Q Enter, finaliza el cálculo. Programa */
}
putimage(x, y, rar, XOR _ PUT); /*Eliminar la flecha del cursor antes de salir*/
Regresar; * Retorno */
}
/*Función de ventana*/
void mwindow( char *header)
{ p >
int height;
clear device();/*Borrar la pantalla de gráficos*/
establecer color(max colours-1);/*Establecer el color actual en White*/
setviewport(20, 20, MaxX/2, MaxY/2, 1, /*Establece el tamaño de la ventana gráfica*/
height = altura del texto(" H "); ); /*Leer el tamaño del texto básico*/
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1); /*Establecer estilo de texto*/
settextjustify(CENTER_TEXT, TOP_TEXT); Establecer la disposición de los caracteres*/
outtextxy(MaxX/4, 2, header /*Título de salida*/
setviewport(20, 2height+4, MaxX /); 2+4, MaxY/2+20, 1); /*Establecer el tamaño de la ventana gráfica*/
dibujar borde() /*Dibujar el borde*/
} p>
Void drawboder(void) /*Dibujar el borde*/
{
struct viewporttype vp/*Definir la variable de tipo de ventana gráfica*/
set color(max colours-1); /*Establece el color actual en blanco*/
setlinestyle(SOLID_LINE, 0, NORM _ WIDTH /*Establece el método de dibujo lineal*/
getview settings(&VP);/*Cargue la información de la ventana gráfica actual en la estructura señalada por vp*/
Rectangle (0, 0, vp.right-vp.left, VP . bottom-VP . top);/*Dibujar un borde rectangular*/
}
/*Diseñar función de gráficos del mouse*/
Flecha entera () p>
{
int tamaño;
int raw[]={4, 4, 4, 8, 6, 8, 14, 16, 16, 16 , 8 , 6, 8, 4, 4, 4}; /*Definir coordenadas de polígono*/
setfillstyle(SOLID_FILL, 2 /*Establecer modo de relleno*/
fillpoly); (8, raw); /*Dibujar flecha del cursor*/
size=imagesize(4, 4, 16, 16) /*Probar tamaño de imagen*/
rar=malloc); (tamaño); /*Asignar área de memoria*/
getimage(4, 4, 16, 16, rar /*Almacenar imagen de flecha del cursor*/
putimage(4, 4, rar, >
int tecla especial(void)
{
int clave;
mientras(clave BIOS(1)= = 0); /*esperar la entrada del teclado*/
tecla = tecla BIOS(0); /*entrada del teclado*/
clave=clave&0xff? Llaves y llaves. 0x ff:key>& gt8;/*Solo toma el valor escaneado de la clave especial, el resto es 0*/
Introducir clave;/*Devuelve el valor de la clave*/
}