Sustituir un caracter en C (String.h)

Iniciado por JoiaribDG, 3 Marzo 2016, 16:07 PM

0 Miembros y 3 Visitantes están viendo este tema.

JoiaribDG

Tengo una tarea en la que tengo que ingresar una palabra o un nombre, y despues ingresar cuantas veces quiero que esa palabra se repita, todo bien hasta aqui, pero tambien me pide que despues pida una letra, y que esa letra sistituya la primera letra de la palabra con esta letra
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[])
{
char texto1[40],letra[1];
int n,c=1;

printf("\nIntroduce tu nombre:");
gets(texto1);
printf("\nCuantas veces quieres repetir tu nombre:");
scanf("%d",&n);
printf("\nCon que letra quieres reemplazar la primera letra de tu nombre?:");
scanf("%s", &letra[1]);

texto1[1]=letra[1];

for(c=1;c<=n;c++)
{
printf("%s\n",texto1);
    }
getch();

return 0;
}


Hasta  ahora tenia bien el razonamiento pero no me funciona el programa :/ necesito ayuda el programa se entrega hoy :c

MAFUS

Vale, unas cuantas cosas que no tienes claras:
Un array de 1 elemento es una redundancia, por tanto donde pone
char texto1[40],letra[1];
debe poner
char texto1[40],letra;

Los arrays en C empiezan en el índice 0, no el 1. Así pues donde pone
texto[1] = letra[1]
debe poner
texto[0] = letra[0];
pero como hemos dicho que letra es un simple char la línea debe ser así:
texto[0] = letra

Un fallo que has realizado es en la linea
scanf("%s", &letra[1]);
porque estas cargando toda una cadena donde solo te cabe un caracter. Además el fallo es más grave porqué estás escribiendo fuera de la memoria asignada para letra (solo tienes asignado letra[0], escribir en letra[1] es escribir fuera de los límites de la variable). Además hay que recordar que letra lo hemos dejado como caracter por tanto debería escribirse todo de esta forma:
scanf("%c", &letra);
o mejor aún haciendo uso de getchar así:
letra = getchar();

JoiaribDG

Muchisimas Gracias! :D mi logica estaba mal! D: pero muchisimas gracias por la ayuda me has servido bastante :D ;-)

CrystalChild


MAFUS

El problema se encuentra en que después de leer el número de veces a repetir la palabra, en el buffer sigue quedando el caracter de nueva línea que has introducido al pulsar la tecla ENTER. Para solucionar esto puedes usar la siguiente linea de código después de una lectura de estas:
while(getchar() != '\n');