[C] Varias dudas

Iniciado por n-utz, 25 Febrero 2017, 20:32 PM

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

n-utz

Buenas tardes gente, tengo algunas dudas básicas con programación en C, las ordenaré.

1) Preciso alguna función o alguna forma para convertir una variable de tipo caracter en entero, y luego viceversa. El caso es que tengo un caracter, el cual preciso su codigo ASCII como valor en una variable, realizar algo con ese numero, como restar o sumar, y luego convertir el resultado a caracter nuevamente.

2) Al trabajar con archivos utilizo las funciones fwrite y fread, pero al escribir en archivos de textos por estas funciones, luego al ir a la raiz y abrirlos con un reader veo que guarda basura. Solo lo puedo leer correctamente si lo leo con fread desde el algoritmo. Alguno sabe como puedo solucionar esto?

3) Qué libro o apunte me recomiendan para aprender C en profundidad. Ultimamente me estaba manejando con Fundamentos de Joyanes, pero tiene varios errores y su explicación no es muy convincente. Alguno para recomendar?


Gracias!

EDIT: Agrego una 4 duda.

4) Quiero generar numeros aleatorios en C, estuve leyendo y se que es mediante las funciones rand() y srand(), pero no logro que cambie el numero en cada ejecución, les adjunto el codigo que hice.

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

int main(){
    int n=0;
    srand(time(NULL));
    n=(rand() % 10);
    printf("%d",n);
    return;
    }

engel lex

Citar1) Preciso alguna función o alguna forma para convertir una variable de tipo caracter en entero, y luego viceversa. El caso es que tengo un caracter, el cual preciso su codigo ASCII como valor en una variable, realizar algo con ese numero, como restar o sumar, y luego convertir el resultado a caracter nuevamente.

el char puede ser tratado como numero, porque a nivel binario eso es... solo restale la posición del primero numero (cero) así si es 0 será 0, si es otro será ese numero

así que puedes hacer

char num  = '8';
int a = num - '0';
printf("num = %d", a);


para convertir int a char es simplemente hacerlo digito por digito, sumandole '0'

Citar2) Al trabajar con archivos utilizo las funciones fwrite y fread, pero al escribir en archivos de textos por estas funciones, luego al ir a la raiz y abrirlos con un reader veo que guarda basura. Solo lo puedo leer correctamente si lo leo con fread desde el algoritmo. Alguno sabe como puedo solucionar esto?

al usar fwrite imprime caracteres tipo char, ya que serán correctos a nivel binario, si imprimes de tipo int, se imprimirá como ese numero en binario y fallará (si escribes un int de valor 64 verás que es @ debido a que es su ascii)

Citar4) Quiero generar numeros aleatorios en C, estuve leyendo y se que es mediante las funciones rand() y srand(), pero no logro que cambie el numero en cada ejecución, les adjunto el codigo que hice.

es raro, ese codigo debería darte un numero diferente cada ejecución... por cierto, el return del int siempre debe ser 0 a menos que sepas para qué usarás algo diferente
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

n-utz

Cita de: engel lex en 26 Febrero 2017, 02:00 AM
el char puede ser tratado como numero, porque a nivel binario eso es... solo restale la posición del primero numero (cero) así si es 0 será 0, si es otro será ese numero

No me quedó muy claro, te explicaré específicamente lo que quiero hacer.

Tengo char caracter='a';

Suponemos el valor ASCII de 'a' es 97, ahora yo a ese valor quiero por ejemplo, sumarle 10, que quede 107 y guardarlo en una variable caracter para representar el valor ASCII de 107.

No me quedó claro eso de sumar 0 y restarle 0 en caracter, lo hice y me dio basura.

engel lex

Cita de: n-utz en 26 Febrero 2017, 03:14 AM
Suponemos el valor ASCII de 'a' es 97, ahora yo a ese valor quiero por ejemplo, sumarle 10, que quede 107 y guardarlo en una variable caracter para representar el valor ASCII de 107.

char caracter='a';
caracter = caracter + 10;
printf("%c",caracter);


eso imprimirá 'k' que es lo esperado

lo que te digo es por ejemplo

int q = 0;
    scanf("%i", &q);
    char num = q + '0';
    printf("%c", num);


num será el ascii correspondiente al simbolo del digito numerico introducido
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.