mile95 Posted January 18, 2015 Report Posted January 18, 2015 /*Cerinta:Sa se citeasca de la tastatura numele unui fisier binar si un text. Sa se creeze fisirul dupa numele dat si poi sa se intratora textul in el*/#define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <conio.h>#include<string.h>void main(){ FILE *f; char fnume[10]; char continut[100]; int poz; printf("Introduceti numele fisierului:"); gets(fnume); printf("Introduceti textul pe care il doriti introdus in fisier: "); gets(continut); errno_t err; err = fopen_s(&f, fnume, "w"); for (int i = 0; i < strlen(continut); i++) { printf("%c", continut); fwrite(&continut, sizeof(int), 1, f); } fclose(f); _getch;}/* Problema merge dar textul introdus in fisier este scris in Chineza. Am folosit " printf("%c", continut); " doar ca sa vad daca textul ii memorat corect si este. Ce am gresit de ii scris in Chineza ? */ Quote
mojito.mojito Posted January 18, 2015 Report Posted January 18, 2015 incearca fgets() sau getchar() acum nu stiu bine de ce in ASCII iti baga in chineza, dar incearca astea doua functii Quote
nedo Posted January 18, 2015 Report Posted January 18, 2015 Salut, problema ta e relativ simpla.Functia fwrite are urmatoarea semnatura:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );Tu ca si marime, trimiti marimea unui int(care e mai mare decat un char).Asta inseamna ca pentru fiecare caracter tu defapt scrii mai mult.Exemplu:Input : ala bala porto cala;tu citesti a, dar scrii in fisier al sau ala sau eu stiu, mai mult, pentru ca atunci cand spui size(int) ii spui citeste primi x bytes.Schimba din fwrite(&continut, sizeof(int), 1, f); in fwrite(&continut, sizeof(char), 1, f); si ai sa vezi ca functioneaza perfect. Quote
mojito.mojito Posted January 18, 2015 Report Posted January 18, 2015 Salut, problema ta e relativ simpla.Functia fwrite are urmatoarea semnatura:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );Tu ca si marime, trimiti marimea unui int(care e mai mare decat un char).Asta inseamna ca pentru fiecare caracter tu defapt scrii mai mult.Exemplu:Input : ala bala porto cala;tu citesti a, dar scrii in fisier al sau ala sau eu stiu, mai mult, pentru ca atunci cand spui size(int) ii spui citeste primi x bytes.Schimba din fwrite(&continut, sizeof(int), 1, f); in fwrite(&continut, sizeof(char), 1, f); si ai sa vezi ca functioneaza perfect.oooh acum am vazut si eu int in loop, eu m-am oprit la gets() ca nu-mi place. Quote
hitme Posted January 19, 2015 Report Posted January 19, 2015 ti-am lasat in comentarii si functia de afisare pe ecran, sa vezi ca a functionat cum trebuie/*Cerinta:Sa se citeasca de la tastatura numele unui fisier binar si un text. Sa se creeze fisirul dupa numele dat si poi sa se intratora textul in el*/#include <stdio.h>#include <stdlib.h>#include <string.h>void verific (FILE *f){ if(f == NULL) { printf("Eroare fisier."); exit(EXIT_FAILURE); }}int main(){ char nume_binar[30]; char sir[100]; printf("Nume fisier binar: [exemplu.dat] "); gets(nume_binar); FILE *f=fopen(nume_binar,"wt"); verific(f); int n,i=0; printf("Citesc sir, sirul de incheie cu enter \n"); gets(sir); fwrite(&sir[i++],sizeof(char),strlen(sir),f); fclose(f); return 0;}/*int main(){ char nume_binar[30]; char sir[100]; printf("Nume fisier binar: [exemplu.dat] "); gets(nume_binar); FILE *g=fopen(nume_binar,"rt"); verific(g); int n,i=0; fseek(g,0L,2); //ma pozitionez la sfarsitul fisierului n=ftell(g)/sizeof(char); //ftell returneaza pozitia curenta a cursorului (care este la sfarsit) dar o impart la numarul de octeti necesari unui caracter, sa determin dimensiunea sirului fseek(g,0L,0); //// ma pozitionez la inceputul fisierului fread(&sir[i++],sizeof(char),n,g); puts(sir); fclose(g); return 0;}*/ Quote