infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Mihailescu Vlad Tiberiu din Septembrie 16, 2014, 14:15:50



Titlul: Citire cu cstdio
Scris de: Mihailescu Vlad Tiberiu din Septembrie 16, 2014, 14:15:50
Salut, am observat ca anumite probleme necesita citire din fisier cu cstdio . De obicei folosesc fstream si as vrea sa-mi spuna cineva cum as putea scrie asta:

ifstream f("d.in");
ofstream g("d.out");
.
.
f>>n>>m;
g<<n<<m;

cu cstdio, folosind structura cu freopen

Si as dori ca sa-mi explice cineva care este diferenta dintre scrierea aceasta:

FILE *f,*g;
.
.
f=fopen("cod5.in","r");
g=fopen("cod5.out","w");
fscanf(f,"%d",&n);
..
fprintf(g,"%d",n);

si scrierea cu freopen, deoarece am vazut recent intr-un topic pe infoarena ca ar exista diferente.


Si ca sa nu mai deschid alt topic:



#include <cstdio>

using namespace std;
FILE *f,*g;
int n,i,j,a[100][100];
char x;
int main()
{
    f=fopen("cod5.in","r");
    g=fopen("cod5.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            {fscanf(f,"%c",&x);
            a[j]=x-'0';}
    for(i=1;i<=n;i++)
    {for(j=1;j<=n;j++)
            {fprintf(g,"%d",a]i][j]);fprintf(g," ");}
            fprintf(g,"\n");}
    return 0;
}

Daca am ca date de intrare
5
00000
01000
10100
01000
00000
imi afisaza:
-38 0 0 0 0
0 -38 0 1 0
0 0 -38 1 0
1 0 0 -38 0
1 0 0 0 -38
Am observat ca problema este de la  fscanf(f,"%c",&x); dar nu stiu sa corectez


Titlul: Răspuns: Citire cu cstdio
Scris de: George Marcus din Septembrie 16, 2014, 15:45:53
S-a mai raspuns la aceasta intrebare.
Cod:
freopen("d.in", "r", stdin);
freopen("d.out", "w", stdout);
scanf("%d %d", &N, &M);
printf("%d %d", N, M);
Apelurile freopen() face ca intrarea/iesirea standard sa fie din fisier.

Legat de doua intrebare, greseala e ca citesti si caracterul '\n' (sfarsit de linie) si trebuie sa te asiguri ca sari peste el.
De exemplu fscanf(f,"%d\n",&n); la inceput si citesti un caracter in plus la sfarsitul fiecarei linii.