Se dispone de dos vectores paralelos de 5 elementos, el primer vector contiene cadenas de caracteres (nombre de un articulo, máximo 20 caracteres), el segundo vector contiene números enteros (unidades disponibles, se admite el valor 0).
Proceso a realizar:
Desde teclado se introducirá el nombre de un artículo y las unidades disponibles, estos datos se ubicaran en los respectivos vectores, teniendo en cuenta lo siguiente:
Si el nombre de artículo no existe en el vector de nombres, se ubicara en la siguiente posición libre en el vector de nombres, y las unidades correspondientes se ubicaran en posición homologa en el vector de unidades).
Si el nombre de artículo ya existe en el vector de nombres, las unidades correspondientes se sumara a la cantidad existente en la posición homologa en el vector de unidades).
Al final del programa se mostraran los datos introducidos
Controlar que no se admitan más de cinco nombres diferentes, no obstante la entrada de datos debe poderse terminar antes de completar los cinco nombres.
#include <stdio.h>
#include <string.h>
typedef char Tarticulo [5][21];
typedef int Tunidades [5];
int main(){
Tarticulo articulos;
Tunidades unidades;
char art[21];
int i, j, uds, repetido = 0;
for(i=0; i<5; i++){
printf("Introduzca el nombre del articulo y las unidades");
gets(art);
scanf("%i", uds);
for(j=0; j<5; j++){
if(art == articulos[j]){
unidades[j] = unidades[j] + uds;
repetido = 1;
}
}
if(repetido==0){
for(j=0; j<5; j++){
if (articulos[j] == ' '){
articulos[j] = art;
unidades[j] = uds;
}
}
}
}
for(i=0; i<5; i++){
printf("El articulo %s tiene %i unidades", articulos[i], unidades[i]);
}
}
ElChabaldelPc escribió:asi rapido sin mirar mucho ^^U:
no puedes comparar cadenas con ==, usa strcmp()
ademas, yo q tu no usaria gets(), usa mejor fgets()
if (articulos[j] == ' '){
??if (strcmp(articulos[j], ){
ElChabaldelPc escribió:no, la cosa quedaria mas bien asi:
#include <string.h>
if((strcmp(articulos[j],arts))==0)
{
....
ya que strcmp devuelve un 0 si ambas cadenas son iguales, >0 si la segunda va antes alfabéticamente y <0 si la primera va antes
ademas, para copiar 1 cadena a otra debes usar:
strcpy(destino, origen);
#include <stdio.h>
#include <string.h>
typedef char Tarticulo [5][21];
typedef int Tunidades [5];
int main(){
Tarticulo articulos;
Tunidades unidades;
char art[21];
int i, j, uds, repetido = 0;
for(i=0; i<5; i++){
printf("Introduzca el nombre del articulo y las unidades\n");
fgets(art);
scanf("%i", uds);
for(j=0; j<5; j++){
if((strcmp(art, articulos[j])) == 0){
unidades[j] = unidades[j] + uds;
repetido = 1;
}
}
if(repetido == 0){
for(j=0; j<5; j++){
if (articulos[j][1] == EOF ){
strcpy (articulos[j], art);
unidades[j] = uds;
}
}
}
}
for(i=0; i<5; i++){
printf("El articulo %s tiene %i unidades", articulos[i], unidades[i]);
}
}
)Hombre grifo escribió:¿Estás seguro de que puedes usar EOF ahí? Yo que tú inicializaría la variable unidades de algún modo(-1, por ejemplo) para poder usarla como comprobador, de modo que si unidades[j] == -1 es que articulo[j] no se ha usado aún...Yo es que no uso nunca EOF, pero no me suena que puedas usarlo así...
Ah, y si usas fgets como te dice ElCHabaldelPc(que a mi también me parece más fácil) te coge la línea entera, así que luego tendrias que usar sscanf(destino del fgets, "%s %d", destino(las variables articulo y unidades))...